我遇到了默认构造函数的意外行为。有这堂课
class Data {
public:
Data() { std::cout << "default ctor"; }
};
并打电话
Data(x);
调用默认构造函数,而调用
double x;
Data(x);
产生冲突的声明 'Data x'。
我想这是某种令人烦恼的解析,但我看不到其背后的逻辑。你能解释一下 g++ 编译器是怎么看的吗?
这里的问题来自引入 C 时的方式。当你写
type(name);
它被解析为声明一个变量,如
type name;
这意味着在
Data(x);
您声明了一个名为的变量x
,该变量的类型Data
为
double x;
Data(x);
你x
用 type声明一个变量名,double
然后尝试声明一个x
用 type命名的变量Data
。你不能像这样重新定义一个变量,所以你会得到一个错误。
如果你只想声明一个临时的,Data
那么语法就是
Data();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句