结构参数的默认值

Posted

技术标签:

【中文标题】结构参数的默认值【英文标题】:Default value for struct parameter 【发布时间】:2013-02-24 19:42:53 【问题描述】:

假设我有以下结构:

struct myStruct

 int x;
 int y;
 int z;
 int w;
;

我想在调用以下函数时将此结构初始化为默认值。如果有帮助,我正在寻找一个简单的零初始化。

void myFunc(myStruct param=0,0,0,0)

 ...

然而,这段代码给了我编译错误。我试过VS2003和VS2008。

注意:我看过其他提到使用构造函数的答案。但是我希望用户查看我用于初始化的值。

【问题讨论】:

myStruct param=myStruct0,0,0,0? @HighCommander4 不。 如果您需要其他程序员查看myStruct 的默认值(这是您希望将其定义为您所拥有的唯一原因),我会将该信息添加为注释,而不是在参数列表中创建一个默认结构 - 注释可能更优雅一些。或者,您可以改为传递一个指向 myStruct 的指针,默认参数值为 NULL,然后在方法内检查 NULL 并在需要时创建一个空结构。 @PLPiper 我可能最终会这样做,但我想知道是否有办法解决这个问题。 我假设对 VS2003/VS2008 的限制是在参数集中使用初始化列表的限制因素。函数呢? 【参考方案1】:

在您的 myStruct 中添加 默认构造函数 将解决您的问题。

struct myStruct 
   myStruct(): x(0),y(0), z(0), w(0)     // default Constructor
   int x, y, z, w;
;

函数声明:

void myFunc(myStruct param = myStruct());

【讨论】:

【参考方案2】:

对于完全实现值初始化的现代 C++ 编译器,具有以下值初始化默认值来对 myStruct 的数据成员进行零初始化就足够了:

myFunc(myStruct param=myStruct())

对于其他编译器,你应该使用这样的东西:

myStruct zeroInitilizer() 
   static myStruct zeroInitilized;
   return zeroInitilized;

myFunc(myStruct param=zeroInitilizer())

为了避免编译器细节考虑使用http://www.boost.org/doc/libs/1_53_0/libs/utility/value_init.htm

【讨论】:

我想说现在zeroInitializer() 是没有必要的,你的第一个解决方案应该可以工作。无论如何,我会使其内联并返回由`= `初始化为零的局部常量变量的副本 .... zeroInitializer 函数内部的static 的用途是什么?

以上是关于结构参数的默认值的主要内容,如果未能解决你的问题,请参考以下文章

.NET DateTime类型变量作为参数时设置默认值

ArgParse Python 模块:更改继承参数的默认参数值

SwiftUI 绑定默认值(参数标签 '(wrappedValue:)' 不匹配任何可用的重载)

使用支持对象/结构的泛型时如何返回空值/默认值? [复制]

在JAVA中能给方法参数赋默认值吗

python函数使用参数技巧笔记