sha*_*oth 3 c++ initialization local-variables built-in-types
如何在C++中默认初始化基本类型的局部变量?例如,如果a有一个typedef:
typedef unsigned char boolean;//that's Microsoft RPC runtime typedef
Run Code Online (Sandbox Code Playgroud)
我想更改以下行:
boolean variable = 0; //initialize to some value to ensure reproduceable behavior
retrieveValue( &variable ); // do actual job
Run Code Online (Sandbox Code Playgroud)
自动默认初始化变量的东西 - 我不需要为它分配一个特定的值,而是每次程序运行时我只需要将它初始化为相同的值 - 与构造函数相同的东西我可以拥有的初始化列表:
struct Struct {
int Value;
Struct() : Value() {}
};
Run Code Online (Sandbox Code Playgroud)
并且Struct::Value将默认初始化每一个实例cinstructed时间相同的值,但我从来不写在代码的实际值.
如何为局部变量获得相同的行为?
您可以通过以下方式模拟该行为:
boolean x = boolean();
Run Code Online (Sandbox Code Playgroud)
或者,更一般的,
T x = T();
Run Code Online (Sandbox Code Playgroud)
x如果存在这样的默认初始化,这将默认初始化.然而,T x无论你做什么,只是写作永远不会为局部变量做诀窍.
您也可以使用placement-new来调用"构造函数",即使对于POD:
T x;
new (&x) T();
Run Code Online (Sandbox Code Playgroud)
请注意,此代码为非POD类型生成未定义的行为(特别是对于具有非平凡析构函数的类型).要使此代码与用户定义的类型一起使用,我们首先需要调用对象的析构函数:
T x;
x.~T();
new (&x) T();
Run Code Online (Sandbox Code Playgroud)
此语法也可用于POD(由§§5.2.4/ 12.4.15保证),因此上述代码可以不加选择地用于任何类型.