【问题标题】:passing structure directly to function将结构直接传递给函数
【发布时间】:2010-04-08 17:03:18
【问题描述】:

我有一个这样初始化的结构:

typedef struct
{
 word w;
 long v;
}
MyStruct;


MyStruct sx = {0,0};
Update(sx);

现在,先声明然后通过它似乎是一种浪费。我知道在 C# 中,有一种方法可以在一行中完成所有操作。是否有可能以更聪明(阅读:更清洁)的方式将它传递给我的更新函数?

【问题讨论】:

  • 为什么将所有内容放在一条线上很重要?编译器将生成相同的代码(删除未使用的实例)。如果代码更具可读性,请始终使用多行。此外,使用多行代码可能会简化调试。

标签: c++ struct


【解决方案1】:

在 C++ 中,结构与类相同,除了在结构中默认情况下所有内容都是公共的。所以你可以给一个结构一个构造函数,例如

struct MyStruct
{
 word w;
 long v;

 MyStruct(word w, long v) : w(w), v(v) {}
};


Update(MyStruct(0,0));

此外,C 风格的结构类型定义在 C++ 中是不必要且不鼓励的。

【讨论】:

  • +1 使用构造函数。 C++ 中的 typedef 实际上略有不同(仅用名称命名结构),但在大多数情况下,它会被忽视且不重要(而且很可能不是它出现在问题代码中的原因)
【解决方案2】:

这取决于您的Update 是如何声明的。如果它需要 MyStruct 类型的值或 const MyStruct& 类型的引用,你可以这样做

Update(MyStruct());

这是可能的,因为您想用零初始化您的对象(这就是 () 初始化程序在这种情况下所做的)。如果您需要不同的(非零)初始值设定项值,则必须为 MyStruct 提供构造函数,或者按照您在问题中的方式进行操作(至少在当前版本的 C++ 语言中)。

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多