C++ 右值引用

Jenf_Mu 2012-10-10 05:20:14
VS2010的vector模板类的void push_back(_Ty&& _Val)
用到了右值引用,这是C++11标准有的。

但我试了

vt.push_back(MyClass(1));
仍然会调用一次构造函数,一次复制构造函数。那和push_back(const _Ty& _Val)这样,有啥区别呀,直接用const引用参数不就行了。
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
漫步者、 2012-10-10
  • 打赏
  • 举报
回复
双&&?
qingcairousi 2012-10-10
  • 打赏
  • 举报
回复
你的move constructor呢?
taodm 2012-10-10
  • 打赏
  • 举报
回复
楼主,不要在C++98标准的语法基础还不过关的情况下去强行学习C++2011的东西,先放一放吧。
Saleayas 2012-10-10
  • 打赏
  • 举报
回复
添加一个移动构造!
LJT25 2012-10-10
  • 打赏
  • 举报
回复
vt.push_back(MyClass(1));
仍然会调用一次构造函数,一次复制构造函数。那和push_back(const _Ty& _Val)这样,有啥区别呀,直接用const引用参数不就行了。


这个当然要调用一次构造函数,一次复制构造函数了。
构造函数调用在Myclass(1),此时生成一个无名对象,作为引用参数传递给push_back函数,push_back函数要复制实参到自己的存储空间,所以会调用一次复制构造函数。
oN5GrzoN 2012-10-10
  • 打赏
  • 举报
回复
void FunTest(MyClass && fi)
{
cout<<"&&"<<endl;
}

void FunTest(const MyClass & fi)
{
cout<<"const &"<<endl;
}

int main(int argc, char *argv[])
{
MyClass fi("ABC");
FunTest(fi);
return 0;
}
Flammable_ice 2012-10-10
  • 打赏
  • 举报
回复
对于C++11标准我还不太清楚,等大神来回答吧。友情帮顶下。

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧