编译器将变量声明与函数原型混淆

时间:2018-05-08 15:14:22

标签: c++ language-lawyer variable-declaration ambiguity function-prototypes

考虑以下代码

struct A {
    A() { /* do something */ }
};

struct B {
    B(const A& a) { /* do something*/ }
};

int main() {
    B b(A());
    // the rest of the code
}

所以我打算将b定义为从A的临时实例构造的变量。但是,编译器将此行理解为函数原型声明:

warning C4930: 'B b(A (__cdecl *)(void))': prototyped function not called (was a variable definition intended?)

有人可以解释发生了什么以及如何做我想做的事情吗?这是一个已知的模糊性,由标准解决了函数原型而不是变量定义吗?

我知道B b = A();有效,但是,我不喜欢它的样子。它没有表明意图。

0 个答案:

没有答案