学习C++新特性(二)

编程入门 行业动态 更新时间:2024-10-11 17:24:12

学习C++<a href=https://www.elefans.com/category/jswz/34/1767830.html style=新特性(二)"/>

学习C++新特性(二)

1、右值引用

c++11之前,

左值:表达式之后还持久存在的对象;

右值:表达式结束后不存在的临时对象;

c++11之后

右值分纯右值、将亡值;

纯右值:纯粹的字面量(如 10,true)或者求值结果相当于字面量或匿名临时对象。(字符串字面量只有在类中是右值,在普通函数中是左值)。

将亡值:即将被销毁却能移动的值。

右值引用:T &&  将临时对象传递给变量,使得将亡值延续。

使用move可以将左值改为右值引用

	string s1="this is ";     // s1w为左值string&& yr1 = move(s1);     yr1是右值引用 okstring&& yr1 = s1;           fail 

移动语义

利用move来使得原来对象传递的拷贝 析构等过程简化

v.push_back(str); // 将使用 push_back(const T&), 即产生拷贝行为
std::cout << "str: " << str << std::endl;    // 将输出 "str: Hello world."v.push_back(std::move(str));
// 将使用 push_back(const T&&), 不会出现拷贝行为
// 而整个字符串会被移动到 vector 中,所以有时候 std::move 会用来减少拷贝出现的开销
// 这步操作后, str 中的值会变为空
std::cout << "str: " << str << std::endl;   // 将输出 "str: "

左引用:c++11之前,引用都是左引用,加了const的常引用可以看作右引用

右引用 加上 && 来表示的为右引用

	const int& f= 1; //可以看作右引用int && d = 2;   // 右引用d = 12;

引用坍缩规则可以使得只有当 实参为右引用时才能被推导为右引用类型。

完美转换 使用std::forward<T>(value) 来实现转发引用的类型与实参类型保持一致

更多推荐

学习C++新特性(二)

本文发布于:2024-02-11 16:17:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681958.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:新特性

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!