C++是否重视POD typedef的初始化?

Nei*_*all 9 c++ pointers

C++是否在简单的POD typedef 上进行值初始化?

假设

typedef T* Ptr;
Run Code Online (Sandbox Code Playgroud)

Ptr()
Run Code Online (Sandbox Code Playgroud)

做值初始化并保证相等(T*)0

例如

Ptr p = Ptr();
return Ptr();
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 17

确实如此.对于类型T,T()value初始化类型的"对象" T并生成rvalue表达式.

int a = int();
assert(a == 0);
Run Code Online (Sandbox Code Playgroud)

pod-classes也是如此:

struct A { int a; };
assert(A().a == 0);
Run Code Online (Sandbox Code Playgroud)

对于一些没有用户声明构造函数的非POD类也是如此:

struct A { ~A() { } int a; };
assert(A().a == 0);
Run Code Online (Sandbox Code Playgroud)

既然你做不到A a()(改为创建一个函数声明),boost有一个类value_initialized,允许解决它,而C++ 1x将具有以下替代语法

int a{};
Run Code Online (Sandbox Code Playgroud)

在标准的干话中,这听起来像

表达式T(),其中T是非数组完整对象类型的简单类型说明符(7.1.5.2)或(可能是cv限定的)void类型,它创建指定类型的rvalue,它是值-initialized

由于typedef-name是一个类型名称,它本身就是一个简单类型说明符,所以这很好用.

  • 我一直在研究标准草案,试图解决这个问题.我忘记了typedef,并试图找出一个指针类型如何成为一个简单类型说明符(它不是),现在它是有道理的:你不能做int*(),但你可以做T()如果T是typedef'ed到int*. (3认同)