【问题标题】:const reference binding to an rvalue [duplicate]const引用绑定到右值[重复]
【发布时间】:2010-11-21 14:11:27
【问题描述】:

在处理this 问题时,我发现了一个不一致的行为。

为什么引用绑定在构造函数中的行为与普通函数不同?

struct A {
};

struct B : public A {
  B(){}
private:
  B(const B&);
};

void f( const B& b ) {}

int main() {
  A a( B() ); // works
  A const & a2 = B(); // C++0x: works, C++03: fails
  f( B() );  // C++0x: works, C++03: fails
}

我已经在严格的 C++03 模式下使用 g++-4.1 和 Comeau 4.2.45.2 对 C++03 进行了测试,并且禁用了 C++0x 扩展。我得到了相同的结果。

对于 C++0x,在宽松模式下使用 g++-4.4 和 Comeau 4.3.9 进行了测试,并启用了 C++0x 扩展。我得到了相同的结果。

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:
    A a(B());
    

    是一个名为 a 的函数的声明,它返回一个 A,并采用一个指向函数的指针,而没有返回 B 的参数。参见 here。 添加括号,你会得到你期望的错误:

    A a((B()));
    

    【讨论】:

    • 著名的“最令人头疼的解析”。
    • 我迫不及待地想对某人说“你成为最棘手的解析问题的受害者”的那一天。当然,到那时我会完全忘记它并重新开始讨厌 C++。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2013-07-04
    • 2017-04-15
    • 1970-01-01
    • 2017-03-12
    • 2021-09-09
    • 2014-01-02
    相关资源
    最近更新 更多