如何将结构中的所有内容都设置为0
how to set everything inside a structure to 0?
我有一个结构,其中有3种不同类型的值(char、float、int)。。。。。。。我需要在程序开始时将所有内容设置为0。我该怎么做?
通常有两种方法:
A a = A();
或
A a = {};
第一种方法的优点是,如果您稍后提供构造函数,它仍然有效(只要您提供默认值构造函数)。
关于使用memset
的建议:memset
只是保证适用于积分类型。我无法想象为float
工作,但在形式上,这并不能保证。和当然,如果以后修改struct
,它可能会停止工作这是一个需要避免的解决方案。
struct A
{
int a;
char b;
float c;
};
struct A
是一个聚合的内置类型,初始化为0
。您可以通过两种方式初始化为A:
//Class method pass to function
int main()
{
A a = {}; // initialize single A to 0
A b = A(); // same effort
A c[10] = {}; // initialize array to 0
return 0;
}
您可以使用构造函数初始化所有元素。因此,您不仅可以使用0,还可以使用其他值。
struct A
{
int a;
char b;
float c;
A(int _a=0,char _b=0,float _c=0.0) : a(_a), b(_b), c(_c) {}
};
int main()
{
A a;
// work with a
return 0;
}
有几种方法:
- 使用初始值设定项
mystruct x = { ' ', 0.0f, 0 };
- 使用
mystruct x; memset(&x, 0, sizeof(x));
- 编写一个函数(或者,在C++中,一个构造函数),将每个值设置为零
一般来说,第一个是最明显的,但如果你有大量的structs,那么你可能会发现选项2或3中的任何一个都更合适。
注意:只有在只包含数据的数据结构上使用memset
才是安全的。在C++中,struct
和class
几乎相同,而具有成员函数、具有其他struct
或class
成员或继承了其他class
或struct
成员的struct
在上使用memset
肯定是不安全的。当然,如果您从纯数据struct
开始,这尤其危险,然后将功能添加到struct
中,这"打破"了"唯一数据"的承诺。
相关文章:
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 聚合初始化,将成员指针设置为同一结构成员
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 如何在 CMake 中设置此文件夹结构?
- 在 lldb 中为大型数据结构设置观察点
- 使用构造函数初始化结构还是在之后设置其值更好?
- 在C++中设置仅包含每个类的一个外观的数据结构
- 使用 sscanf 设置结构引用的值
- 在通过 P/Invoke 获取的 C++ 结构上设置 C# 回调
- 在一个步骤中设置结构成员变量的内存利用
- 在模板专业化期间,如何设置C 结构中的静态字段
- 使用模板C++动态设置结构
- 无法动态设置结构变量的数组大小
- 设置结构边界框值
- 提升灵气自定义句法属性(通过语义动作设置结构属性的特定成员)
- 设置结构中指针的值
- 设置结构数组中的多行错误
- 在其他函数中设置结构成员的值
- 直接设置结构 tm 属性的值不起作用