goo*_*era 1 c++ language-lawyer c++11
我从几个来源接受过教育,在C++ 11中,函数的返回值可以从包含命名局部变量的return语句构造.例如:
class A {};
A f() {
A a;
return a;
}
int main() {
f();
}
Run Code Online (Sandbox Code Playgroud)
也就是说,在C++ 11中,函数调用表达式指定的prvalue临时值f()
是从函数的局部变量中移动构造的a
,而不是像C++ 03中那样的复制构造.当然,从语义上讲,在进行任何优化级别之前,复制省略,NRVO等都是如此.
我的问题是,A
'move构造函数的参数是类型的A&&
,它只能绑定到prvalue或xvalue,对吧?那么哪个特定的异常规则允许它绑定到左值a
?谢谢.
哪个特定的异常规则允许它绑定到左值这里?
那是 12.8[class.copy]/32
当满足或将满足复制操作的省略标准时,除了源对象是函数参数这一事实,并且要复制的对象由左值指定,重载决策选择复制的构造函数是首先执行,好像对象是由右值指定的.