表达式与函数

来源:互联网 发布:最大淘宝小号交易平台 编辑:程序博客网 时间:2024/06/11 02:17

1.左值和右值
左值为对象的身份(内存的位置),所有具名变量均为左值,即可寻址。
右值为对象的值(内容)

  1. 原始字面值,如0,“abc”等
  2. 表达式返回值
  3. lambda表达式
  4. 非引用返回值

2.decltype
左值为引用,右值为类型
3.cout<< i<<” “<<++i<< endl;//结果未定义
4.bool b = true;
bool b2=-b; 仍为true,因为-b不为0
5.模运算
m%(-n) = m%n
(-m)%n = -(m%n)
6.解引用运算优先级
* p++等价于 *(p++)
* iter.empty()等价于 *(iter.empty()) //编译错误
7.转换

  • static_cast 不包含底层const的类型转换均可以,不过不会检查错误
  • dynamic_cast会检查动态指向转换的正确性,指针返回nullptr,引用会抛bad_cast异常
  • const_cast 去除底层const的转换
  • reinterpret_cast 底层位转换 (int* —– char*)

8.顶层const无法使函数重载
void fcn( const int i )
void fcn( int i ) //属于重复定义
void fcn( const int &r )
void fcn( int &r) //底层const可以作为重载
9.不要返回局部对象的指针或引用
10.一旦某个形参被赋予了默认实参,则它后面的所有形参都必须有默认实参
11.constexpr和内联函数放在头文件中(即可多次定义)
编译器想要展开函数仅有函数声明是不够的,还需要函数的定义
12.assert(expr)预处理宏
当expr为假时输出信息并终止程序的运行,可以assert(expr&&”出错信息”)输出错误信息便于调试
若定义了NDEBUG则assert什么也不做
13.候选函数与可行函数
①void f()
②void f(int)
③void f(int ,int)
④void f(double,double=3.14)
当调用f(5.6)时,候选函数为(①②③④),可行函数为(②④),最佳匹配为④
14.函数指针与函数返回值
bool (*pf)(…) //函数指针
bool *pf(…) //函数返回值为指向bool的指针

0 0
原创粉丝点击