初始化结构体中的默认值
Initializing default values in a struct
如果我只需要初始化c++结构体的几个select值,这样是否正确:
struct foo {
foo() : a(true), b(true) {}
bool a;
bool b;
bool c;
} bar;
我是否可以假设我最终会得到一个名为bar
的struct
项目,其中包含元素bar.a = true
, bar.b = true
和未定义的bar.c
?
甚至不需要定义构造函数
struct foo {
bool a = true;
bool b = true;
bool c;
} bar;
澄清一下:这些被称为大括号或等号初始化器(因为你也可以使用大括号初始化而不是等号)。这不仅适用于聚合:您可以在普通的类定义中使用它。
是。bar.a
和bar.b
设置为true,但bar.c
未定义。但是,某些编译器会将其设置为false。
查看下面的实例:
根据c++标准章节8.5.12:
如果没有初始化,则返回具有自动或动态存储持续时间的对象具有不确定值
对于基本内置数据类型(bool, char, wchar_t, short, int, long, float, double, long double),只有全局变量(所有静态存储变量)在未显式初始化的情况下获得默认值为零。
如果你不想让bar.c
从未定义的开始,你也应该像对bar.a
和bar.b
那样初始化它
可以通过使用构造函数来实现,如下所示:
struct Date
{
int day;
int month;
int year;
Date()
{
day=0;
month=0;
year=0;
}
};
或者像这样:
struct Date
{
int day;
int month;
int year;
Date():day(0),
month(0),
year(0){}
};
在你的例子中bar.c是未定义的,它的值取决于编译器(而a和b被设置为true)。
显式的默认初始化可以提供帮助:
struct foo {
bool a {};
bool b {};
bool c {};
} bar;
行为bool a {}
与bool b = bool();
相同,返回false
相关文章:
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 实例化时结构字段中的默认值
- 了解具有显式和默认值C++结构
- Boost.Spirit.Qi 语法,用于 Boost.Fusion 自适应结构中的默认值
- 存储具有许多变体的类的默认值的推荐方法是什么?
- C++ 使用成员函数返回结构体指针属性的值
- 在结构C++,构造函数中的默认值和默认参数有什么区别
- 如何将结构变量初始化为默认值
- Corba IDL:结构成员的默认值
- 为什么 MSVC 和 GCC 不能使用具有默认值的字段初始化结构
- 如何使用其他函数返回的值为结构体成员赋值
- 结构成员的默认值
- 给定一个微秒值,如何准确地得到一个时间值结构体?/*更新获取负值*/
- 如何使用默认值定义结构
- CUDA:结构体的共享数据成员和对该结构体的引用成员具有不同的地址和值
- 类内定义的静态结构的静态成员的编译时默认值
- 初始化结构体中的默认值
- 带默认值的结构体的大括号(聚合)初始化
- 了解隐式声明的默认协结构体
- 结构体中成员的默认值