如何在 C++ 中默认初始化原始类型的局部变量?例如,如果 a 有一个 typedef:
typedef unsigned char boolean;//that's Microsoft RPC runtime typedef
我想更改以下行:
boolean variable = 0; //initialize to some value to ensure reproduceable behavior
retrieveValue( &variable ); // do actual job
进入会自动默认初始化变量的东西 - 我不需要为其分配特定的值,但我只需要每次程序运行时将其初始化为相同的值 - 与构造函数相同的东西我可以在其中拥有初始化程序列表:
struct Struct {
int Value;
Struct() : Value() {}
};
and the Struct::Value
每次构造实例时都会默认初始化为相同的值,但我从未在代码中写入实际值。
如何为局部变量获得相同的行为?
You can emulate该行为通过以下方式实现:
boolean x = boolean();
或者,更一般地说,
T x = T();
这将默认初始化x
如果存在这样的默认初始化。然而,只是写T x
无论你做什么,都永远不会对局部变量起作用。
您还可以使用 Placement-new 来调用“构造函数”,甚至对于 POD 也是如此:
T x;
new (&x) T();
请注意,此代码会为非 POD 类型(特别是具有重要析构函数的类型)产生未定义的行为。为了使此代码适用于用户定义的类型,我们首先需要调用对象的析构函数:
T x;
x.~T();
new (&x) T();
这个语法可以also用于 POD(由 §§5.2.4/12.4.15 保证),因此上述代码可以不加区别地用于any type.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)