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名称是类型名称,它本身就是一个简单类型说明符,因此可以正常工作。