C++小细节
-
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; sizeoftypeid
-
左值使用的是对象的身份(位置),右值使用的是对象的内容(值)。
-
decltype(左值)返回一个引用类型 -
m%n结果符号匹配m。C++11 -
重载函数无法区分顶层形参,只能区分底层const和const引用
-
在块内声明函数会覆盖掉块外的函数,而不会构成重载。
-
给定作用域中的一个形参只能被赋予一次默认实参。
-
const成员函数,const修饰的是this指针,所以const成员函数如果返回this,那这个指针是底层const的。 -
友元函数的的声明只是权限的声明,并不是真正的函数声明。
-
编译器编译类的时候,先处理成员和函数声明,最后处理函数定义,无论是否定义在类外。
-
类的静态成员变量必须在类内声明,类外定义。即使该变量是
const或者constexpr也最好这样。

浙公网安备 33010602011771号