pmj*_*bin 7 rvalue-reference c++11
我最近一直在玩Rvalue参考,我遇到了一个奇怪的问题.让我们定义一个名为Foo的简单类,其中包含vector< int >:
class Foo
{
public:
Foo(std::vector< int >&& v)
: v_(v)
{}
private:
std::vector< int > v_;
};
Run Code Online (Sandbox Code Playgroud)
Foo可以通过传递一个vector< int >临时构造一个实例,如下所示:
std::vector< int > temp;
Foo(std::move(temp));
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试单步执行此代码时,我注意到内部的向量Foo是使用copy-constructor而不是move-constructor构造的.但是,如果我这样指定构造函数:
Foo(std::vector< int >&& v)
: v_(std::move(v))
{}
Run Code Online (Sandbox Code Playgroud)
然后,v_适当地调用该成员的move-constructor .为什么会这样?为什么std::move(v)初始化列表中需要冗余?为什么编译器无法推断出调用向量移动构造函数的意图,因为相应的Foo构造函数参数被指定为Rvalue引用?
顺便说一下,我正在使用GCC 4.6和-std = c ++ 0x选项.
谢谢你的帮助.PMJ
在函数(或构造函数)内部,命名参数是左值,即使它被声明为右值引用.
理由是这样的
void foo(std::vector< int >&& v)
{
bar(v);
baz(v);
boo(v);
buz(v);
}
Run Code Online (Sandbox Code Playgroud)
编译器应考虑从哪个调用移动到对象v?
没有,除非你明确地这样做.
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |