表达式
- 解引用操作符优先级低于递增操作符。
*p++; // 等价于*(p++)
- 异或运算符是有且只有一个为1才为1,否则为0;
- 位运算符如何处理符号位并没有明确的说明,所以最好是用在无符号类型。
- 移位运算符优先级低于算术运算符,但是高于比较运算符,赋值运算符和条件运算符。
- 强制类型转换:static_cast,const_cast,reintercept_cast;
函数
- 空语句:;用于语法需要而逻辑不需要的地方,使用的地方最好加注释说明是空语句。
- 自动对象: 只存在于执行期间的对象,比如形参。
- 使用引用避免拷贝,如果无需改变引用形参的值,最好定义为const。
- 使用引用形参传递返回额外信息,跟Java中传递一个地址进去,改变了这个地址指向的值。
- 不定长参数:
initializer_list<string> arg; //多个strin
6 . 省略符;
void foo(int a , ...);
void foo(int a...)
void foo(...)
7 . 函数return后,它所占用的内存会被清除,所以不要返回局部对象的引用。
8 . main函数可以没有return语句,编译器会默认加一句return 0;
9 . 当函数返回值比较复杂,比如是数组指针时,有3种方式简写:
//第一种,类型别名
typedef int arrT[10];
using arrT = int[10];
//第二种:尾置返回类型
auto func(int i) -> int (*)[10];
//第三种:使用decltype代替类型
int arrT[10];
decltype(arrT) *func(int i);
10 . main函数不能重载。
11 . 函数可以多次声明,但是如果有默认参数,那么有默认参数的声明只能有一次;当调用的时候,如果想使用默认参数,只能省略后面的。
12 . 内联函数适用于规模小,操作频繁的函数。
13 . 调用重载函数时尽量避免强制类型转换,如:
void f(int a);
void f(int b , int c = 1);
f(2); //上面两个函数都是匹配的
14 . 函数指针:函数指针指向函数而非对象,函数指针可以直接调用该函数,解引用斗不需要。