版权声明:本文为博主原创文章,未经博主允许不得转载。 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