1、C++的的升级
1、C语言的缺点
(1)重用性差
(2)维护性差
2、C++
从面向世界的需求出发来设计我们的程序,
3. 使用增强
A.
for (int i = 0; i < 10; i++) { }
C语言编译器的话,会报错,因为C语言认为,变量需要先定义,后面再时候,而C++的编译器则是可以边定义边使用。
B、
C语言编译器 : 可以重复定义变量,但是C++则不允许。
C、对const 的增强:
C语言:
const 修饰之后,只是说明这边个边不能作为左值使用而已,也就是把变量修饰为只读变量
C++:
const 修饰之后,变量就真的是常量了
当const 变量的时候,就将常量放到符号表里面;
编译的过程若发现使用了常量,则直接使用符号表里面的值进行替换
D、const 和 define 区别
const 常量 是由编译器进行处理,提供类型检查和作用域的检查
宏定义是由预处理器处理,做单纯的文本替换而已。
E.对bool 类型的增强
int main() { int a; bool b = true; printf("b = %d, sizeof(b) = %d\n", b, sizeof(b)); b = 3; a = b; printf("a = %d, b = %d\n", a, b); b = -5; a = b; printf("a = %d, b = %d\n", a, b); b = 0; a = b; printf("a = %d, b = %d\n", a, b); while (1); }
b = 1, sizeof(b) = 1 a = 1, b = 1 // b 虽然是等于三,但是非零就是 true,编译器是以 一进行替换, a = 1, b = 1 // 非零所以为 true, a = 0, b = 0
因为C++编译器会将非零的值全部转为 true,而零值则转为 false,对于 true 和false 而言,内部都是用 零和 一进行替换,
int main() { bool b = false; printf("b = %d\n",b); b++; printf("b = %d\n",b); while (1); } 输出结果为:0 和 1
F. 三木运算符
int a = 1; int b = 2; (a < b ? a : b) = 3; printf("a= %d, b = %d\n", a, b);
C编译器的话,就会报错,因为在c编译器中,三木运算符返回的是数值,数值是不可以做左值的。
但是在C++编译器就可以,因为三木运算符返回的是变量,所以输出的a = 3, b = 2;
4.引用
引用其实就是对已经变量的一个别名,比如:
int a; int &b = a;
这就是一个引用的列子,也就是说,对 b 的操作,其实等同于对 a 的操作,记住引用的如好,不是取地址符,是引用哈,
int a ; int &b = a; // 定义了引用,必须使用其他的变量马上进行初始化 b = 5; printf("a = %d,b = %d\n",a, b); printf("%08x\n", &a); printf("%08x\n", &b);
输出的结果是,a =b =5,输出的地址也是一样的地址,
引用其实是有自己的存储空间的,内部的实现的方式其实也是通过指针的方式实现的,所以一个引用占据的大小就是四个字节,
当函数的返回值作为引用的时候:
(1)栈变量做引用的话,这个实时不被允许,最好不要,
(2)全局变了或者静态变量,可以作为引用,