调用具有意外结果的默认构造函数
Call of default constructor with unexpected results
我遇到了默认构造函数的意外行为。有了这个class
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
且类型为 double
的变量,然后尝试声明一个名为 x
且类型为 Data
的变量。您不能像这样重新定义变量,所以会出错。
如果你只想声明一个临时的 Data
那么语法是
Data();
我遇到了默认构造函数的意外行为。有了这个class
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
且类型为 double
的变量,然后尝试声明一个名为 x
且类型为 Data
的变量。您不能像这样重新定义变量,所以会出错。
如果你只想声明一个临时的 Data
那么语法是
Data();