C++拾遗(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24894159/article/details/81253539

最近在阅读一些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


猜你喜欢

转载自blog.csdn.net/qq_24894159/article/details/81253539