C++拾遗(一)

最近在阅读一些C++代码,发现似乎看完两年前看完谭浩强C++入门的教程后,C++的语法知识都没有再有多少提升,然鹅现在C++17都在使用了…恍若隔世.



1. std::move()

一个简单的例子

    std::string str = "Hello";
    std::vector<std::string> v;
    cout<<str<<str.length()<<endl;
    v.push_back(std::move(str));
    cout<<str<<str.length()<<endl;
    cout<<v[0]<<endl;
输出:
Hello5
0
Hello

可以看到str中的内容为空了.官方解释是以一种更加高效的方式将一个对象资源传递.


2. constexpr

常量表达式,它不同于const之处有:

1 const不能确定是 编译期的常量还是运行期的常量.而constexpr则确定为编译期的常量.
2 constexpr一般来说修饰函数时返回是编译期常量,但是有特殊情况:如果传入的参数不是编译期常量的话,那么这个函数就是一个普通函数.


3. 左值(lvalue)和右值(rvalue)

左值和右值是C++11后变得比较重要的概念.(使用c渣渣的我目前感触不是很深)

左值指可以在等号左边和右边出现的值,右值是只能在等号右边出现的值或表达式.
左值和右值的根本区别是是否可以取地址,能取地址的是左值,不能取地址的是右值
参考1:https://www.zhihu.com/question/26203703
参考2:http://www.cnblogs.com/catch/p/3500678.html


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值