一. 表达式
-
整形提升:char bool short 转换为int
-
左值与右值:
一个对象被用作是右值的时候,用的是对象的值,当被用作左值的时候,用的是对象在内存中的位置。 -
优先级和结合律:
左结合律:表达式从左往右运算。
优先级高的先组合在一起,优先级相同的按照结合律运算,括号无视优先级和结合律。
赋值运算满足右结合律 -
求值顺序:最好用括号来强制组合求值顺序。
-
&& and | | 运算符的短路求值策略:
当且仅当左侧的运算无法确定表达式的结果才进行右侧的运算 -
递增递减运算符的前置后置问题
前置返回改变后的对象,后置返回的是改变值之前的那个对象的副本。
养成习惯使用前置,减少性能开销。
条件运算符?:
强制类型转换运算
const_cast 改变底层const
static_cast:只要不含有底层const都能够使用
二. 语句
throw语句抛出异常。
try catch语句 执行try,在try中检测异常,在catch中捕捉异常并执行相应的代码 。
三. 函数
管理指针三种常用的技术:
1. 使用标记指定数组长度:C风格字符串’\0’结束
2. 使用标准库规范:首元素和尾后元素指针
3. 显式的传递一个表示数组大小的形参
C++11: iterator头文件中新增了begin end函数,可以获取数组的首元素和尾后元素指针。
在传递计数的参数的时候使用size_t替代int,增强可移植性。
C++11:initializer_list类型的参数,类似于vector 但存储的都是常量,可作为形参传递。
数组的引用和引用的数组:
int &arr[10];//引用的数组
int (&arr)[10];//数组的引用
----------类似的------------
int *arr[10];//指针数组 长度为10 元素是int的指针
int (*arr)[10];//数组指针,指向int[10]的数组
从右往左看,第二个是长度为10的int数组,且是个引用.
第一个是长度为十的数组,每个数据类型是int&
main函数可以没有返回值,其他非void函数必须要有返回值。
C++11 尾置返回类型简化函数返回数组指针,使用decltype确定返回值类型。如果是个数组,需要加上*。
默认实参:在函数声明中添加默认实参,以后使用函数的时候,形参会被赋予相应的默认值。
tips:把不怎么使用的默认值的形参放在前面,经常使用的放在后面。
const与函数重载:只有底层const能够重载同名函数。有顶层const的形参没办法和一个没有顶层const的形参区分。
也就是说如果只是不能修改自己本身的值的参数重载,就不能够通过。
但是在类中 const成员函数和非const成员函数就属于重载
1.底层const能够重载的例子
void fun(int& a) {
cout << "non-const" << endl;
}
void fun(const int& a)
{
cout << "const" << endl;
}
int main() {
int d = 10;
const int a = 19;
fun(d);
fun(a);
}
2.顶层const不能重载的例子
void fun(int a) {
cout << 1 << endl;
}
void fun(const int a)
{
cout << 2 << endl;
}
int main() {
const int d = 10;
fun(d);
}