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对象的创建,但只能是当调用者用一个常量引用访问它时才行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值