std::is_void
的描述指出:
提供等于 true 的成员常量值,如果 T 是 类型 void, const void, volatile void, 或 const 易失性 void。
那么什么可能是
const void
,或者volatile void
?
这个答案指出
const void
返回类型将无效(但是在VC++ 2015上编译)
const void foo() { }
如果按照标准,
const void
无效(VC错误)-那么const void
是什么?
const void
是一种可以形成指针的类型。它与普通的 void 指针类似,但转换的工作方式不同。例如,const int*
无法隐式转换为 void*
,但可以隐式转换为 const void*
。同样,如果您有 const void*
,则不能将其 static_cast
转换为 int*
,但可以将其 static_cast
转换为 const int*
。
const int i = 10;
void* vp = &i; // error
const void* cvp = &i; // ok
auto ip = static_cast<int*>(cvp); // error
auto cip = static_cast<const int*>(cvp); // ok
类型可以是模板的结果;模板可能会声明
const T
,并使用 T
实例化为 void
。
链接的答案被误导,或者更确切地说,其观点受到限制,因为它考虑了非模板类型的特殊情况,即使如此,
const void
可能是无意义,但它是有效代码。