如何在C++中默认初始化内置类型的局部变量?

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时间相同的值,但我从来不写在代码的实际值.

如何为局部变量获得相同的行为?

Kon*_*lph 5

您可以通过以下方式模拟该行为:

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保证),因此上述代码可以不加选择地用于任何类型.