我不确定我什至需要使用哪些搜索词来找到该问题的答案,因此,如果重复出现该问题,我们深表歉意。基本上,为什么要编译?

struct A {
    A(){};
    A(const char*){};
};

int main() {
    //const char* b = "what is going on?";
    A(b);
    return 0;
}

但这不是吗?
struct A {
    A(){};
    A(const char*){};
};

int main() {
    const char* b = "what is going on?";
    A(b);
    return 0;
}

test.cpp: In function ‘int main()’:
test.cpp:8: error: conflicting declaration ‘A b’
test.cpp:7: error: ‘b’ has a previous declaration as ‘const char* b’

C++的哪些功能导致这种歧义?
这样做的主要目的是在类型A的堆栈上创建一个匿名变量。类似于A a(b);,但未命名a。

最佳答案

这是由C++语法中的歧义引起的。 A(b);被解析为b的定义,AA{b};类型的对象。 [stmt.ambig]中描述了此确切问题。

要解决此问题,请使用统一的初始化(A(b));或将其用括号括起来以强制将其用作表达式,而不是声明ojit_code。任何一种修复都将允许您的程序进行编译。

10-08 11:09