gpt4 book ai didi

c++ - 使用用户定义的构造函数初始化 C++ 结构

转载 作者:行者123 更新时间:2023-11-27 23:53:21 24 4
gpt4 key购买 nike

我定义了以下结构及其默认构造函数:

struct State
{
State()
{
// Initialize both stacks with unit matrices
objStack.push(Matrix(1, 1, 1, SCALE));
lightStack.push(Matrix(1, 1, 1, SCALE));
}

std::stack<Affine> objStack;
std::stack<Affine> lightStack;

int maxDepth = 5;
std::unique_ptr<Point[]> vertices = nullptr;
Colour ambient = Colour(0.2);
};

如果我声明的构造函数在我实例化一个 State 结构时被执行,最后 3 个变量是否仍然被初始化为 5、nullptr 和 Colour(0.2)?或者我的构造函数应该是这样的:

  State()
{
// Initialize both stacks with unit matrices
objStack.push(Matrix(1, 1, 1, SCALE));
lightStack.push(Matrix(1, 1, 1, SCALE));

maxDepth = 5;
vertices = nullptr;
ambient = Colour(0.2);
}

我不确定这里会发生什么。

最佳答案

在 C++11 或更高版本中,您的第一个示例是正确的。它将初始化类成员作为构造过程的一部分,这将在调用 struct State 构造函数的主体之前发生。在 C++11 之前,以这种方式对成员进行类内初始化是无效的,并且不会编译。您可以使用初始化列表以不同方式编写以下部分,这会产生与 C++11 代码相同的行为。

struct State
{
State() : maxDepth(5), verticies(NULL), ambient(0.2)
{ ...
}

int maxDepth;
std::unique_ptr<Point[]> vertices;
Colour ambient;
};

如果您编写代码在构造函数体中设置类成员,它们将被设置两次。一次是在结构的构造函数通过成员的默认构造函数执行之前,然后是当您在结构的构造函数主体中设置它们的值时再次执行。 int 或其他原始类型没有默认构造函数,因此在 struct ctor 主体中的代码设置它之前它会未初始化。但是像 std::unique_ptr 这样的对象将被设置两次,因为它确实有一个默认的 CTOR,该默认 CTOR 将在 struct ctor 主体运行之前使用。

关于c++ - 使用用户定义的构造函数初始化 C++ 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575111/

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