默认构造函数的C ++歧义。还有什么?

时间:2019-07-31 21:59:18

标签: c++ constructor

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

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。

1 个答案:

答案 0 :(得分:5)

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

要解决此问题,请使用统一初始化(A(b));或将其括在括号中以使其强制为表达式而不是声明session_settings。两种修复方法都可以使您的程序得以编译。

相关问题