多行注释风格
注释内的每行都以一个星号开头,从而指出整个范围都是多行注释的一部分。
多行注释不可嵌套使用。
一、基本内置类型(算数类型+空类型)
算数类型(整型+浮点型)
1、一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,即一个char的大小和一个机器字节一样。
2、wchar_t类型用于确保可以存放机器最大扩展字符集中的任意一个字符。
3、char16_t和char32_t为unicode字符集服务。
4、float有7个有效位,double有16个有效位。
5、字符型被分为了三种:char、signed char、和unsigned char。类型char和类型signed char并不一样。尽管字符型有三种,但是表现形式却只有两种:带符号的和不带符号的,具体哪种由编译器决定。
6、把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。
7、若表达式中既有带符号类型又有无符号类型,带符号数会自动转换成无符号数。切勿混用带符号类型和无符号类型。
字面值常量
1、默认情况下,十进制字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。
2、尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数。eg:-42,这个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已。
3、若两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔,则它们实际上是一个整体,当书写的字符串字符串字面值较长,写在一行里不太合适时,就可以采取分开书写的方式。
转义序列
1、若反斜线后跟着的八进制数字超过3个,只有前3个数字与\构成转义序列。\x要用到后面跟着的所有数字。
2、nullptr是指针字面值。
空类型
二、变量
初始化
1、列表初始化:当用于内置类型的变量时,这种初始化形式有一个重要特点:若我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。
声明变量
在变量名前添加关键字extern,且不要显示的初始化变量,若包含初始值则变成了定义,在函数体内,若视图初始化一个由extern关键字标记的变量,将引发错误。
标识符
1、用户自定义的标识符中不能连续出现两个下划线,也不能以下划线紧连大些字母开头。
2、定义在函数体外的标识符不能以下划线开头。
三、复合类型
复合类型是指基于其他类型定义的类型。
引用
1、引用必须被初始化。
2、无法令引用重新绑定到另外一个对象。
3、因为引用本身不是一个对象,所以不能定义引用的引用。
4、引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。
指针
1、因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。
2、试图拷贝或以其他方式访问无效指针的值都将引发错误。
空指针
1、nullptr是一种特殊类型的字面值,它可以被转换成任意其他的指针类型。
2、在新标准下,最好使用nullptr,尽量避免使用NULL。
void* 指针
1、void* 是一种特殊的指针类型,可用于存放任意对象的地址。
2、用void* 指针能做的事比较有限:拿它和别的指针比较、作为函数的输入或输出、赋给另一个void* 指针。不能直接操作void* 指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。
3、以void* 的视角来看内存空间也就仅仅是内存空间,没办法访问内存空间中所存的对象。
四、const
常量指针
1、常量指针必须初始化。
2、把*放在const关键字前用以说明指针是一个常量
constexpr和常量表达式
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
1、一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定。
尽管staff_size的初始值是个字面值常量,但由于它的数据类型只是个普通int而非const int,所以它不属于常量表达式。
尽管sz本身是一个常量,但它的具体值直到运行时才能获取到,所以也不是常量表达式。
2、将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,且必须用常量表达式初始化。
3、一个constexpr指针的初始值必须是nullptr或0,或者存储于某个固定地址中的对象(定义于所有函数体之外的对象)。
4、constexpr声明中若定义了一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关。
constexpr把它所定义的对象置为了顶层const。
五、处理类型
类型别名
1、typedef
2、using,使用别名声明来定义类型的别名,用关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。
指针、常量和类型别名
如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句里就会产生意想不到的后果 。
pstring的基本数据类型是指针,切勿将char*做为整体代替pstring。
auto类型说明符
1、auto让编译器通过初始值来推算变量的类型,auto定义的变量必须有初始值。
2、使用auto也能在一条语句中声明多个变量,因为一条语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型都必须一样。
若希望推断出的auto类型是一个顶层const,需明确指出。
decltype类型指示符
若希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量则使用decltype,它的作用是选择并返回操作数的数据类型。
1、因为r是一个引用,因此decltype®的结果是引用类型。如果想让结果类型是r所指的类型,可以把r作为表达式的一部分,如r+o,显然这个表达式的结果将是一个具体值而非一个引用。
2、若表达式的内容是解引用操作,则decltype将得到引用类型。
3、若变量名加上了一对括号,则会被当做是表达式,变量是一种可以作为赋值语句左值的特殊表达式,这样的decltype就会得到引用类型。
decltype((variable))的结果永远是引用。
编写自己的头文件
头文件一旦改变,相关的源文件必须重新编译以获取更新过的声明。