持续更新......
-
cin
不仅遇到EOF会返回无效状态(通常用来终止循环),遇到无效输入的时候也会返回无效状态,比如向整型变量输入字符。 -
char
类型的大小和机器有关,最小8位,大多数机器字节(byte)是8位,byte是可寻址的最小内存块,所以地址的尺寸就是byte的尺寸。 -
char
是signed char
或者unsigned char
,具体取决于编译器。 -
给无符号类型类型赋值超出范围时,取模。比如
unsigned char
,赋值对256取模。 -
给有符号类型类型赋值超出范围时,UB。
-
有符号数和无符号数混合运算(size一样,size不一样,会转换到dasize的类型),有符号数会被转化为无符号数,
char
例外,所以要避免有符号数和无符号数混合运算。 -
字面值(如
13
)没有负数,-13
只是对字面值取负。 -
字符串字面值(如
"hello"
),实际上是由常量字符组成的数组。 -
转义字符后跟的是8进制或者16进制数字,如
8
是错误的,x8
是正确的。 -
int a{1.211}
,会报错 -
标识符不要以两个下划线或者一个下划线加大写字母开头。
-
vector
下标运算符只能访问存在的对象,不能用于添加对象 -
任何一种影响
vector
容量的操作,都会导致原先的迭代器失效 -
两个指针没有指向同一个对象,或者同一个数组,那么两个指针做运算是UB。
-
数组在以下几种情况下不会转换成指针:
decltype
- 作为取地址符
&
,int a[10]; /*数组a的指针*/ int (*p)[10] = &a;
sizeof
typeid
-
左值使用的是对象的身份(位置),右值使用的是对象的内容(值)。
-
decltype(左值)
返回一个引用类型 -
m%n
结果符号匹配m。C++11 -
重载函数无法区分顶层形参,只能区分底层const和const引用
-
在块内声明函数会覆盖掉块外的函数,而不会构成重载。
-
给定作用域中的一个形参只能被赋予一次默认实参。
-
const
成员函数,const
修饰的是this
指针,所以const
成员函数如果返回this
,那这个指针是底层const
的。 -
友元函数的的声明只是权限的声明,并不是真正的函数声明。
-
编译器编译类的时候,先处理成员和函数声明,最后处理函数定义,无论是否定义在类外。
-
类的静态成员变量必须在类内声明,类外定义。即使该变量是
const
或者constexpr
也最好这样。