扩展初始值设定项列表和未初始化的成员
extended initializer list and uninitialized members
在过去,结构是这样的:
typedef struct A {
int m_i;
int m_j;
} A;
在堆上分配或在函数中本地声明而不memset
其成员将未初始化。
然而,令我非常惊讶的是,这个小程序显示它总是设置为 0。
#include <stdio.h>
typedef struct A {
int m_i;
int m_j;
} A;
void f(const A& a) {
printf("i=%i, j=%in", a.m_i, a.m_j);
}
void y() {
f({10});
}
int main() {
y();
return 0;
}
使用g++ -std=c++11 a.cpp
构建
我会以防万一地定义一个构造函数以确保它们为零,但我的各种测试表明(使用在互联网上找到的代码(我不必这样做。
这是剪切巧合还是扩展的初始值设定项列表是内存被内存设置的保证?
typedef struct A {
int m_i;
int m_j;
} A;
是一个聚合。 使用大括号初始化聚合时,它使用列表中的每个元素来初始化聚合的每个成员。 如果你没有在大括号的init列表中提供足够的元素,那么保证每个后续成员都被值初始化,这对于基本类型意味着它们初始化为零。
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员