C++ primer 5 chapter2 笔记

来源:互联网 发布:时空猎人刷魔晶软件 编辑:程序博客网 时间:2024/06/07 02:56
1.C++支持的数据类型
1)除了常规C的内置数据类型,增加了w_chart, char16_t, char32_t, long long, long double
2)对于char类型,不同的机器实现不同,可能是unsigned char,也可能是signed char。
3)对于整型,浮点型,字符型,字符串型的字面常量,是有默认数据类型的,当然也可以显式的指定字面常量的类型。也有布尔类型和指针类型的字面值。
2.变量
1)C++用户自定义标识符时
(1)连续两个下划线开头不允许
(2)下划线+大写字母不允许
(3)函数外的变量不允许下划线开头
上述只是推荐行为,并不会引起编译错误。是为了防止和标准库里的保留字冲突。


3)变量定义,可以看作数据类型和声明符两部分,声明符有变量名和修饰符组成。修饰符决定了变量的类型是与基本数据类型有关的某种类型,比如是一个int型的引用。
4)extern int a= 0;这样在声明时进行初始化,也是合法的,但此时extern将失去意义,不在是声明,是定义了。将可能引起变量重复定义。
5)增加了列表初始化{}方式,但是不能有精度损失,否则报错。
6)引用型变量必须定义时初始化,且初始值的类型和引用变量的类型必须完全相同,否则编译报错。即使能自动数据类型转换,也不行。不能定义一个指针,其类型是引用。比如int & *p; 引用指向的对象是不能改变的。
7)空指针推荐使用NULL PTR
8)对于复杂的变量定义,从靠近变量的地方逐层开始声明符识别。
9)对于const引用,其初始化的值的类型可以和引用类型不同,只要通过转换可以一致即可。const引用可以执行非const的对象,只是此引用自己不能被赋值罢了。
const int &a = b; 和int const &a = b;是等价的;
10)const指针可以指向非const对象,指向的对象的类型可以和指针类型不一致,只要可以转换即可。
11)两个对象拷贝时,其底层const类型必须一致或者可以转换一致,被const可以转换给const,反之不行
12)constexpr用于指针变量定义是,只修饰了指针标识符,且必须用必须用NULLPTR或者0初始化。
13)一般使用auto声明变量时,初始值的顶层const被忽略,如果要保持,需要在auto前显式的指出,同时底层const会保留。如果auto声明的是引用变量,则初始值的顶层const不会被忽略。auto推断的只是基本数据类型,声明修饰符还是要显式指出来,比如是*或者&
14)decltype(变量),是能返回顶层const和&的,与auto不同。decltype((变量))返回的就是引用了,如果decltype(表达式)返回的也可能是引用。
15)类内初始化成员时,不能用(),据说是为了避免语法分析的歧义。




疑问:
1)表达式是什么类型呢?为啥delctype表达式会返回引用呢?
0 0