您不能声明void
多变的:
void fn() {
void a; // ill-formed
}
但这编译:
void fn() {
void(); // a void object?
}
什么是void()
意思是?它有什么用?为什么是void a;
格式不正确,同时void()
OK?
void fn() {
void a = void(); // ill-formed
}
该声明
void();
创建一个 void 值,然后丢弃它。 (除了丢弃或返回它之外,实际上您不能对 void 值做太多事情。)
The standard† 在 5.2.3 中说 [expr.type.conv
表达式 T(),其中 T 是非数组完整对象的简单类型说明符或类型名称说明符
type 或(可能是 cv 限定的)void 类型,创建指定类型的纯右值,其值为
通过对 T 类型的对象进行值初始化 (8.5) 生成; void() 情况下不进行初始化
请注意,它明确指出void()
是合法的。
† 我的链接是 N4296,它是 C++14 之前的最后一个公共委员会草案,但是该标准的各个版本在这里并没有变化。
Edit
有用吗?这么明确的吗?不,我看不出它有什么用处。它is但是,在模板函数中很有用,有时会执行以下操作:
template <typename T>
T foo() {
if (prepare_for_for()) {
return do_foo();
} else {
return T();
}
}
即使对于T
== void
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)