社区
C++ 语言
帖子详情
void push_back(_Ty&& _Val) 这里的"&&"是什么意思
IranCyberArmy
2012-06-25 05:49:52
参数是引用类型见的多了,这里两个&,是什么意思啊?
(这是微软的vector类的实现)
...全文
405
10
打赏
收藏
void push_back(_Ty&& _Val) 这里的"&&"是什么意思
参数是引用类型见的多了,这里两个&,是什么意思啊? (这是微软的vector类的实现)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
IranCyberArmy
2012-06-26
打赏
举报
回复
[Quote=引用 9 楼 的回复:]
引用楼主 的回复:
参数是引用类型见的多了,这里两个&,是什么意思啊?
(这是微软的vector类的实现)
&& 是 右值引用。
在C++0x之前,只有左值引用。
C++11之后有了右值引用,用来从根本解决C++一直以来的临时变量低效问题。
[/Quote]
vector<SpecialClass>&& func()
{
…
return std::move(vect);
}
我基本明白了,不过,还有个疑问,如果是类成员函数,返回的是类成员变量,我比较喜欢返回
const vector<SpecialClass>& abc::func()
{
return 成员变量;
}
这样行不行啊。
ZongShengLee
2012-06-26
打赏
举报
回复
[Quote=引用楼主 的回复:]
参数是引用类型见的多了,这里两个&,是什么意思啊?
(这是微软的vector类的实现)
[/Quote]
&& 是 右值引用。
在C++0x之前,只有左值引用。
C++11之后有了右值引用,用来从根本解决C++一直以来的临时变量低效问题。
IranCyberArmy
2012-06-26
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
我也不明白,这两个&&连在一起,编译器能区分是引用的引用吗?
就像 vector<vector<int>>一样,如果不写成vector< vector<int> >这样,
就会出错。
[/Quote]
以前的版本会出错,新版的C++编译器就没问题,我也是最近才发现的。
kevinyank
2012-06-26
打赏
举报
回复
四楼正解……
kevinyank
2012-06-26
打赏
举报
回复
四楼正解
taodm
2012-06-25
打赏
举报
回复
楼主,学C++要与时俱进的。去找个C++2011标准的相关资料看看吧。
Dreadnought
2012-06-25
打赏
举报
回复
Google 右值引用
标哥-iOS攻城狮
2012-06-25
打赏
举报
回复
我也不明白,这两个&&连在一起,编译器能区分是引用的引用吗?
就像 vector<vector<int>>一样,如果不写成vector< vector<int> >这样,
就会出错。
bulver
2012-06-25
打赏
举报
回复
引用的引用?
AIQ.
2012-06-25
打赏
举报
回复
我只知道2个&& 是并且·······
如何使用栈stack栈
stack栈,如何使用栈,如何学好栈就下载此文档,很全的,谢谢啦,数据结构与算法!!!
push
_back和emplace_back的实现区别(源代码区别)
编译器 MSVC(VS2022) 总结在最后,可以直接看看 开始直接上源代码
push
_back源代码: _CONSTEXPR20
void
push
_back(const _
Ty
& _
Val
) { // insert element at end, provide strong guarantee emplace_back(_
Val
); } _CONSTEXPR20
void
push
_back(_
Ty
&& _
Val
) { // ins
push
_back和emplace_back区别
在使用vector容器时,往容器里添加元素时,有
push
_back和emplace_back两种方法,一般用得最多得是
push
_back,下面看看这两种方法得区别:
push
_back源码,有重载得左值和右值,关于左值和右值可以查看右值引用、移动构造函数和move
void
push
_back(
val
ue_
ty
pe&& _
Val
) { // insert by moving into element at end if (_Inside(_STD addressof(_
Val
))) {
[c++]
push
_back的tip
所以,如果你的结构体或类删除了拷贝构造函数,就需要给
push
_back 传入一个右值。当然,你也可以直接使用 emplace_back,也不会有这样的问题了。因为 std::thread 的实现中是删除了拷贝构造函数的,所有在调用
push
_back 时需要传入一个右值,传入左值就会提示你拷贝构造已经被删除。但是,在查看 vector 的代码时,发现
push
_back 有两个重载函数,传入常量左值引用也不会导致拷贝发生,那么这个拷贝构造是发生在什么地方呢?
vector中
push
_back后iterator失效程序崩溃的原因
vector的
push
_back操作 在c++ reference中,对
push
_back的描述如下:
void
push
_back(const
val
ue_
ty
pe&
val
);
void
push
_back(
val
ue_
ty
pe &amp;amp;&amp;amp;
val
); Add element at the end Adds a new element at the end of the vector...
C++ 语言
65,182
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章