gpt4 book ai didi

c++ - 初始化成员变量

转载 作者:太空狗 更新时间:2023-10-29 23:34:45 28 4
gpt4 key购买 nike

我已经开始接受这种模式了:

template<typename T>
struct DefaultInitialize
{
DefaultInitialize():m_value(T()){}
// ... conversions, assignments, etc ....
};

这样当我有带有原始成员的类时,我可以将它们设置为在构造时初始化为 0:

struct Class
{
...
DefaultInitialize<double> m_double;
...
};

我这样做的原因是为了避免必须记住在每个构造函数中初始化成员(如果有多个构造函数)。我想弄清楚是否:

  • 这是一个有效的模式?
  • 我使用的是正确的术语吗?

最佳答案

This is a valid pattern?

这是一个已知的“有效”模式,我会说。 Boost 有一个名为 value_initialized 的类模板这也正是这样做的。

I am using the right terminology?

好吧,您的模板可以优化为对类型参数的要求更少。不幸的是,截至目前,您的类型 T 需要一个复制构造函数。让我们将初始值设定项更改为以下

DefaultInitialize():m_value(){}

然后,从技术上讲,这种初始化称为值初始化,从C++03开始。这有点奇怪,因为一开始就没有提供任何类型的值。好吧,这种初始化看起来像默认初始化,但旨在用零填充内容,但尊重任何用户定义的构造函数并改为执行它。

总而言之,您所做的是对类型为 T 的对象进行值初始化,然后将该对象复制到 m_value。我上面的版本直接对成员进行值初始化。

关于c++ - 初始化成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225177/

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