return语句绑定左值对左值的引用?

时间:2014-03-05 04:36:00

标签: c++ c++11 language-lawyer

我从几个来源接受过教育,在C ++ 11中,函数的返回值可以从包含命名局部变量的return语句构造。例如:

class A {};

A f() {
    A a;
    return a;
}

int main() {
    f();
}

也就是说,在C ++ 11中,由函数调用表达式f()指定的prvalue临时值是从函数的局部变量a移动构造的,而不是像C +中那样复制构造的+03。当然,从语义上讲,在进行任何优化级别之前,复制省略,NRVO等等。

我的问题是,A的移动构造函数的参数类型为A&&,它只能绑定到prvalue或xvalue,对吗?那么哪个特定的异常规则允许它绑定到左值a?感谢。

1 个答案:

答案 0 :(得分:5)

  

哪个特定的异常规则允许它在这里绑定到左值?

那是12.8[class.copy]/32

  

当满足或将满足复制操作的省略标准时,除了源对象是函数参数,并且要复制的对象由左值指定,重载决策以选择构造函数首先执行复制,就像对象是由右值指定一样。