Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;默认构造函数的模糊性和其他一些东西。那是什么东西?_C++_Constructor - Fatal编程技术网

C++ C++;默认构造函数的模糊性和其他一些东西。那是什么东西?

C++ C++;默认构造函数的模糊性和其他一些东西。那是什么东西?,c++,constructor,C++,Constructor,我不知道我需要用什么搜索词来找到这个问题的答案,所以如果这是重复的话,很抱歉。基本上,为什么要编译 struct A {

我不知道我需要用什么搜索词来找到这个问题的答案,所以如果这是重复的话,很抱歉。基本上,为什么要编译

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(b),但不命名A.< /P> < P>这是由C++语法中的歧义引起的。代码>A(b)
被解析为
b
的定义,即
a
类型的对象。有关此问题的详细信息,请参见


要解决这个问题,可以使用统一初始化
A{b}
或用括号括起来,强制它成为表达式而不是声明
(a(b))。任何一种修复都将允许您的程序进行编译。

C没有引起歧义的功能,因为它不是C代码。您有一个
b
声明为
const char*
,然后您将另一个
b
声明为
a
。C++不允许在同一上下文中进行这种变量阴影。谢谢答案,你能详细说明什么是歧义吗?我什么时候希望以这种方式在括号内声明b?为什么它被允许作为b的声明,我以前从未见过使用这种类型的声明。在C++文档中,我可以用什么关键字来找到这种声明类型?@ TeBAT<代码>()>代码>通常用来在复杂的声明中对事物进行分组(例如:代码> int(*x)[n] < /代码>)。但在你的情况下,他们什么也不做。冗长的<>代码>()>代码>可能是为了方便,或者为了保持语法更简单。@ TeBAT在C++标准中查看。@ IZU:这是一个惊人的链接,请您把答案加上。谢谢你的回答!