gpt4 book ai didi

c++ - 扩展的初始化列表和未初始化的成员

转载 作者:行者123 更新时间:2023-11-27 22:37:23 25 4
gpt4 key购买 nike

过去的结构是这样的:

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=%i\n", 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;

是一个集合。当您使用 braced-init-list 初始化聚合时,它使用列表中的每个元素来初始化聚合的每个成员。如果您没有在 braced-init-list 中提供足够的元素,那么保证每个后续成员都被值初始化,这对于基本类型来说意味着它们是零初始化的。

关于c++ - 扩展的初始化列表和未初始化的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52562327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com