C++对C的一些加强和变化

实用性加强:

int main()
{// C语言中的变量都必须在作用域开始的位置定义!!// C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。for (int i = 0; i < 10; i++){std::cout << i << std::endl;}return 0;
}

register关键字的变化:

register关键字请求“编译器”将局部变量存储于寄存器中
C语言中无法取得register变量地址在C++中依然支持register关键字
1、C++编译器有自己的优化方式,不使用register也可能做优化
2、C++中可以取得register变量的地址C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。#include <stdio.h>int main4_1()
{// 申请寄存器变量register int a = 10;// 在C++中 如果对一个寄存器变量进行取地址操作,该变量将被改回普通变量// register定义将会失效printf ("&a = %p, a = %d\n", &a, a);return 0;
}

变量检测加强:

#include <stdio.h>// 在C语言中重复定义多个全局变量是合法的
// 这些同名的全局变量最终都会被链接全局数据区的同一个地址空间上
int g_a;
int g_a = 1;int main()
{printf ("%d\n", g_a);printf ("%p\n", &g_a);return 0;
}在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突 在C++中不允许定义多个同名的全局变量

struct类型加强:

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明#include <stdio.h>struct Student
{char name[20];int age;void print(){printf ("id = %d, name = %s\n", id, name);}
};int main()
{// C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型// 所以在定义变量的时候需要在前面加上 struct 关键字进行修饰// C++中 struct 定义了一种新的数据类型,可以直接用来定义变量Student stu1 = {"xiaoming", 10};// 2、结构体中可以放函数stu.print();printf ("size = %d\n", sizeof(Student));return 0;
}

函数参数:

#include <stdio.h>// 如果一个函数没有参数,C++认为这是一个无参函数,不能给函数传参
void func()
{printf ("hello world\n");
}// C语言中一个无参函数定义是用void进行填充
void func1(void)  // 等价于 func1()
{}// C++中函数参数必须要有类型
void func2(int a)
{printf ("%d\n", a);
}int main1_1()
{func();// func(1.2,4,5,"adasd");// func1(1,2.3);// func2(3.2);return 0;
}

新增bool类型:

C++中的布尔类型C++在C语言的基本类型系统之上增加了boolC++中的bool可取的值只有truefalse理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示bool类型只有true(非0)和false0)两个值C++编译器会在赋值时将非0值转换为true0值转换为false#include <stdio.h>int main2_3()
{bool b = true;if (b)    // 判断是否为真{}if (!b)  // 判断是否为假{} float f = 0.0000000000001;if (f + 0.000001 > 0 && f - 0.000001 < 0)  // 与0进行比较{}return 0;
}// bool类型:值有2中,true  和  false    true 的值 是1  false 值是 0
// 用 0 来表示 false, 非0 表示 true
int main2_2()
{bool b = false;int a = 0;b = a - 1;b++;b = -100;printf ("%d\n", b);return 0;
}int main2_1()
{printf ("%d\n", true);printf ("%d\n", false);return 0;
}

三目运算符:

#include <stdio.h>// C语言中表达式的结果 放在什么地方? ==> 寄存器
// 表达式返回的是一个值,是一个数
// 在C++中,表达式返回的是变量本身// 2 如何做到的
// 让表达式返回一个内存空间..内存的首地址 指针
// 在C语言中如何实现C++的效果// 3 本质
// C++编译器自己做了取地址的操作
int main()
{int a = 10;int b = 20;// C++中三目运算符返回的是变量本身,所以可以作为左值使用(a > b ? a : b) = 90;// 在C语言中让三目运算符可以当左值使用,可以通过返回变量地址实现*(a > b ? &a : &b) = 90;printf ("%d, %d\n", a, b);return 0;
} 
1)C语言返回变量的值 C++语言是返回变量本身C语言中的三目运算符返回的是变量值,不能作为左值使用C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用(a < b ? 1 : b )= 30;3)C语言如何支持类似C++的特性呢?
====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优秀Unix管理员的七个习惯

摘要&#xff1a;Unix系统管理员可能会很懒或喜欢优雅的解决方法&#xff0c;这就是他们的存在之美。一位优秀的Unix系统管理员有着自己的习惯&#xff1a;不会等到问题来找你、精通所使用的工具和系统、确定事情优先次序和喜欢优雅的解决方案但不迷失等。 优秀的Unix系统管理员…

Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 写法&#xff1a; <template><div id"app"><!-- 三目运算符使用 ‘ok’ 的值定义在 data 中-->{{ ok …

【快写】基本思路及模板

快读也可以了解一下 先从C自带的输出开始吧 cout<<n<<endl;这是最基本的输出&#xff0c;适合初学者 &#xff08;虽然我到现在都还在用&#xff09; 然后稍微快一点的输出 printf("%d",n);这个就比较快速了&#xff0c;但是对于那种毒瘤题目 故意卡你的…

C++与C中const的比较以及const和define的比较

C与C中const的比较&#xff1a; C语言中 const修饰的变量是一个 常变量&#xff0c;本质还是变量&#xff0c;有自己的地址空间C编译器对const常量的处理 当碰见常量声明时&#xff0c;在符号表中放入常量 > 问题&#xff1a;那又如何解释取地址编译过程中若发现对const使…

中国古典十大悲剧

一.《窦娥冤》  《窦娥冤》——元关汉卿 山阴书生窦天章因无力偿还蔡婆的高利贷&#xff0c;把七岁的女儿窦娥送给蔡婆当童养媳来抵债。窦娥长大后与蔡婆儿子成婚&#xff0c;婚后两年蔡子病死。后来蔡婆向赛卢医索债&#xff0c;被赛卢医骗至郊外谋害&#xff0c;为流氓张驴…

解决: Elements in iteration expect to have ‘v-bind:key‘ directives

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错&#xff1a; Elements in iteration expect to have v-bind:key directives 原本写法&#xff1a; <li v-for"site in s…

回来太多事需要处理

出差回来&#xff0c;发现太多事需要处理现在每个项目都在Delay。且没有一个人是主动汇报项目的。这是非常不正常的现象。感觉有点累转载于:https://www.cnblogs.com/boriscao/archive/2005/09/03/229368.html

不该失去的,一块钱也不放弃

很多人都觉得&#xff0c;有钱人既然财力雄厚&#xff0c;花钱时必定毫不手软。然而&#xff0c;观察成功的CEO&#xff0c;你会发现&#xff0c;他们多数人花钱也花得小心&#xff0c;对于什么该花、值得花&#xff0c;算得十分精细。 华人首富、香港长江实业与和记黄埔董事局…

C++之引用

普通引用和常引用 1. 变量名的回顾 变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间 问题&#xff1a;一段连续的内存空间是否只能有一个别名吗&#xff1f; 2. C引用的概念 引…

Vue.js 极简小例:数值计算、千米换算为米、九九乘法表、循环

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template><div id"app"><!-- 千米和米换算 --><div id "computed_props&quo…

shiro框架的学习

权限控制是shiro最核心的东西 Shiro权限声明通常是使用以冒号分隔的表达式。一个权限表达式可以清晰的指定资源类型&#xff0c;允许的操作&#xff0c;可访问的数据。同时&#xff0c;Shiro权限表达式支持简单的通配符&#xff0c;可以更加灵活的进行权限设置。 下面以实例来说…

C++之内联函数

内联函数是一种特殊的函数&#xff0c;具有普通函数的特征&#xff08;参数检查&#xff0c;返回类型等&#xff09; 内联函数是对编译器的一种请求&#xff0c;因此编译器可能拒绝这种请求 内联函数由 编译器处理&#xff0c;直接将编译后的函数体插入调用的地方 宏代码片段…

妈妈培养天才的13绝招

作父母的&#xff0c;都希望自己的宝宝可以变得聪明、懂事&#xff0c;所以想尽办法去让宝宝上早教班、做早期智力开发……当然&#xff0c;这些做法对于开发宝宝智力能够起到一定的帮助。但是&#xff0c;千万别忽视您所能给予宝宝的家庭教育。    近日&#xff0c;日本一位…

Vue.js 极简小例: 4 种方式样式绑定、style 的多种方式实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template><div id"app"><!-- JSON方式使用样式 --><div v-bind:style"{ colo…

C++之默认参数

一、什么是默认参数 C中可以在函数声明时为参数提供一个默认值&#xff0c; 当函数调用时没有指定这个参数的值&#xff0c;编译器会自动用默认值代替 二、默认参数规则 只有参数列表后面部分的参数才可以提供默认参数值 一旦在一个函数调用中开始使用默认参数值&#xff…

50 Python - 装饰器 类定义装饰器

04 类定义装饰器 上节通过函数定义装饰器&#xff0c;本节通过类定义装饰器 001 定义类装饰器 定义一个类&#xff0c;类里面两个函数&#xff0c;一个构造函数init()&#xff0c;一个调用函数call() 构造函数init时候&#xff0c;传递一个函数func()进来 调用函数call()&#…

C++之过载函数

过载函数的定义&#xff1a; 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 过载函数的判断标准&#xff1a; 函数重载至少满足下面的一个条件&#xff1a; 参数个数不同 参数类型不同 参数顺序不同 函数返回值不是函数重载的判断标准 调用…

人民币贬值会让八类人损失惨重!有你吗?

截至20日&#xff0c;人民币本周对美元累计贬值1.24%&#xff0c;年初以来不到三个月时间累计贬值2.79%。分析人士表示&#xff0c;人民币短期内仍有较强下跌压力。本轮人民币急贬预计将对几类人群收入造成严重冲击。 本周以来&#xff0c;人民币对美元即期汇价持续单边下跌。数…

Vue.js 极简小例: 点击事件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template><div> <!-- jy_mothed 是在 js 中自定义的方法 --><button v-on:click"jy_mot…

从最大似然估计到最小二乘法

这一部分内容和吴恩达老师的CS229前面的部分基本一致&#xff0c;不过那是很久之前看的了&#xff0c;我尽可能写的像吴恩达老师那样思路缜密。 1.假设 之前我们了解过最大似然估计就是最大化似然函数$$L(\theta) \sum log(p(x_{i}|\theta))$$ 来确定参数\(\theta\)&#xff0…