cpp小特性荟萃

  1. 如果一个函数的参数列表是int &,那他不能直接接受一个int类型变量的计算 e.g. func(3 * i) 如果改成const int &就可以了,因为3 * i在编译器会变成const int类型,这下是const ref const就合法了

image.png

image.png

(虽然报错形式是 No matching function,其意图仍然在找一个重载的函数能够接受const int &类型) (func应该是void,忘记改了)

  • 启示:在不设计修改的日志操作时,参数列表自动 const 和 & 一块写上

  • ++ii++ 等自增自减运算符在性能上有什么区别? 之前一直简单地觉得 i++++i 只有先后增的区别,实际并非如此

  • 前缀表达:先对变量进行增/减,返回的是变量本身(左值

  • 后缀形式:先调用拷贝构造函数拷贝一个副本,然后对变量本身进行自增/减,最后返回副本。 即:返回的临时副本是递增前,原本样本进行递增不返回 返回的是临时副本,是一个右值,随时都是一个 由于存在拷贝花销,在性能敏感的循环过程中使用 i++ 会重复拷贝构造对象,性能略逊一筹

  • 上一个区别左值右值经典例子即可区分

    cpp int i = 0; int &ref_1 = (++i); //合法 int &ref_2 = (i++); //不合法,报错为:error: llvalue required as unary '&' operand