C++细节

  1. 对于内存漏洞的问题,有一个原则是在能够使用自动变量的时候不要使用new操作符。
  2. 一个左值是一个标识非临时性对象的表达式,一个右值是一个标识临时性对象的表达式,或者是一个不与任何对象相互联系的值。
  3. 在C++11中,左值引用的声明是通过在某个类型后放置一个符号&来进行的;右值引用是通过在某个类型后放置一个符号&&而被声明的。左值引用不能引用一个临时量,而右值引用可以引用临时量。
  4. 左值引用用途(1)给结构复杂的名称起别名;(2)范围for循环for(auto x:arr){++x;}//行不通,for(auto &x:arr){++x;}//行得通。(3)避免复制
  5. C++11的C++参数传递机制一般可以通过两部分测试决定:(1)如果想要形参能够改变实参的值,就必须使用传引用调用(2)否则,就是想要实参的值不能被形参改变。如果类型为基本类型,则使用传值引用。若不是基本类型,则类型就是类类型,并且一般使用传常量引用调用,除非实参是一个非常小且容易复制的类型。
  6. 传右值引用调用核心在于由于右值存储的是要被销毁的临时量,可以通过移动而不是复制来实现。
  7. LargeType randomIteml(const vector& arr)
    {
    return arr[randomInt(0,arr.size()-1)];
    }
    const LargeType & randomItem2(const vector & arr)
    {
    return arr[randomInt(0,arr.size()-1)];
    }
    vector vec;

LargeType item1=randomItem1(vec);//复制
LargeType item2=randomItem2(vec);//复制
const LargeType & item3=randomItem2(vec);//不复制
获得数组中的一个随机项的两种版本,第2种版本避免了临时LargeType对象的创建,但只能是当调用者用一个常量引用访问它时才行。

猜你喜欢

转载自blog.csdn.net/shenhanghanhan/article/details/86319486