在构造函数中默认类的结构字段

Posted

技术标签:

【中文标题】在构造函数中默认类的结构字段【英文标题】:defaulting a structure field of a class in a constructor 【发布时间】:2013-10-27 21:24:50 【问题描述】:

所以假设我有一个名为 donut 的类型。我想为甜甜圈创建一个构造函数,它需要 3 个参数、两个整数和一个具有两个整数作为字段的结构奶油。如果没有提供参数,我想为参数设置默认值。那么语法是怎样的呢?

Donut::Donut(int a=0, int b=0, cream car=0, 0)

                    : donutfield1(a), donutfield2(b), donutfield3(car)  

这不起作用...

【问题讨论】:

第一次代码让我饿了 哈哈........ 【参考方案1】:

试试

Donut::Donut(int a=0, int b=0, cream car=cream0, 0)

(实际上,您的代码应该在符合 C++11 的编译器上编译,但如果不是,上述内容有望有所帮助)

【讨论】:

Hmm... C++11 允许 =0, 0=cream0, 0 而 C++03 AFAIK 只允许 =cream(0, 0) (注意括号)...至少 g++ 告诉我那个。 @leemes 对。嗯,我认为没有 C++03 标记的 C++ 并且考虑到 OP 的尝试表明他正在使用(想要的)C++11 编译器。如果这确实是 C++03,那么圆括号就是解决方案。【参考方案2】:

这种语法是在 C++11 中引入的(称为扩展初始化列表)。为了使您的代码与 C++03 兼容,请使用旧语法:

Donut::Donut(int a=0, int b=0, cream car = cream(0, 0)) ...

请注意,如果您的类(此处为 cream)提供了带有 single 参数的构造函数并且不使用 explicit 关键字,则可以从没有任何括号或括号的参数,例如cream car = 0.

【讨论】:

以上是关于在构造函数中默认类的结构字段的主要内容,如果未能解决你的问题,请参考以下文章

父类的复制构造函数中的嵌套类缺少默认构造函数

C# 构造函数总结

C# 构造函数总结

结构体的初始化(构造函数)

C# 继承和默认构造函数

Kotlin类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )