c++ - 为什么不能在具有 const 引用参数的构造函数中使用临时值?

标签 c++ const-reference

<分区>

代码如下

class A {};
class B
{
public:
    B(const A& a) {}
    void fun() {}
};

int main(int argc, char *argv[])
{
    B b(A());
    b.fun(); // Error: left of '.fun' must have class/struct/union  

    A a;
    B b2(a);
    b2.fun(); //Okay

    return 0;
}

为什么?

最佳答案

代码

 B b(A());

不是声明 B 的对象,而是函数 b 的函数声明,它返回 B 类型的对象并接受一个单一的(未命名的)参数,它是一个返回类型 A 的函数(并且不接受任何输入)。 (从下面的链接引用)。因此,您看到了该错误。

参见 C++ most vexing parse

关于c++ - 为什么不能在具有 const 引用参数的构造函数中使用临时值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16027982/

相关文章:

c++ - 使用非常量值初始化的对 const 类成员的引用

c++ - 导致扬声器产生静电噪声的程序?

c++ - 双向链表类

c++ - 模板中内联函数的好处

c++ - 临时 : No compiler warning? 的绑定(bind)常量&

c++ - 避免构造函数中 const 引用和右值引用的指数增长

c++ - const 引用类成员是否会延长临时对象的生命周期?

c++ - 在现代 C++ 中使用模板替换函数指针数组

c++ - 音频采样频率音高

c++ - 这是符合标准的有效 C++ 代码吗?