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

假设

typedef T* Ptr;

确实
Ptr()

值初始化并保证等于(T*)0吗?

例如
Ptr p = Ptr();
return Ptr();

最佳答案

是的对于T类型,T()值初始化T类型的“对象”并产生右值表达式。

int a = int();
assert(a == 0);

对于Pod类也是如此:
struct A { int a; };
assert(A().a == 0);

对于某些没有用户声明的构造函数的非POD类,也是如此:
struct A { ~A() { } int a; };
assert(A().a == 0);

由于您不能执行A a()(而是创建一个函数声明),boost具有一个 value_initialized 类,可以解决该问题,并且C++ 1x将具有以下替代语法
int a{};

用标准的措辞,这听起来像



由于typedef名称是类型名称,它本身就是一个简单类型说明符,因此可以正常工作。

07-24 09:46
查看更多