调用具有意外结果的默认构造函数

扬·图罗

我遇到了默认构造函数的意外行为。有这堂课

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在继承层次结构中调用具有默认参数的构造函数?

反应-异步调用具有意外的返回顺序

Java反射调用具有原始类型的构造函数

使用反射调用具有默认参数值的函数

从修改默认值的函数调用具有不同默认参数的多个函数

具有OkHTTP3序列调用的android Retrofit2具有意外的相同结果

返回的结构值具有意外结果

模拟调用具有不同类的类构造函数

从C ++ 17中的另一个构造函数调用具有不同参数类型的构造函数

从Java调用具有命名/默认参数的Clojure函数的最佳方法

在SQL语句中调用具有默认值的函数

无法调用具有默认参数的函数专业化,因为参数太少

CMAKE:重复调用具有不同参数的函数会得到相同的结果

无法调用具有渲染函数的组件构造函数,该函数在 for 循环反应中返回 null

当结合使用具有自动值的JAXB时,出现Marsheling错误“没有无参数的默认构造函数”

如何通过指向另一个函数返回的函数的指针调用具有默认参数的函数?

调用具有可转换类型的重载函数时的模板化构造函数模糊性

C ++如何从具有一个参数的派生类构造函数调用具有两个参数的超类构造函数?

Spring java配置调用具有私有构造函数的单例类的公共非静态方法

X类具有多个默认构造函数和对重载函数的歧义调用

使用具有params异常的构造函数注入AppDbContext

引用具有禁用的复制构造函数/分配的对象

调用具有多个默认值的方法

没有调用C ++默认构造函数

具有默认参数的Unity构造函数

调用具有更多异步函数的异步函数

如何调用具有嵌套函数的函数?

Elisp调用具有不同结果的Go代码

C ++类是否具有默认构造函数?在以下情况下会调用什么构造函数?