std::is_void
状态描述为:
如果T是类型void,const void,volatile void或const volatile void ,则提供等于true的成员常数值。
那么这可能是const void
,或volatile void
?
此答案指出const void
返回类型将无效(但是在VC ++ 2015上编译)
const void foo() { }
如果按照标准,const void
是无效的(VC错误),那么什么是const void
?
std::is_void
状态描述为:
如果T是类型void,const void,volatile void或const volatile void ,则提供等于true的成员常数值。
那么这可能是const void
,或volatile void
?
此答案指出const void
返回类型将无效(但是在VC ++ 2015上编译)
const void foo() { }
如果按照标准,const void
是无效的(VC错误),那么什么是const void
?
void
Answers:
const void
是一种可以构成指向的类型。它类似于普通的void指针,但是转换的工作方式不同。例如,const int*
不能将a隐式转换为a void*
,但可以将其隐式转换为a 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 void
,而是围绕void和non-void指针[具有(non-)const-ness]。
const void*
是您见过的唯一原因const void
。它可能作为模板参数传递,但是该参数类型将永远只*
在其末尾实例化。
const void
在问问题的语言律师
const void
是可以使用C ++实现所有类型const
。它以现有的方式“存在” void
。@Benjamin Lindley的答案解释了它的含义以及使用方式。
如void
,const void
是空隙型。但是,如果const void
是返回类型,则它const
是没有意义的(尽管合法!),因为[expr] / 6:
如果prvalue最初具有类型“ cv
T
”,其中T
cv是不合格的非类,非数组类型,则T
在进行任何进一步分析之前,将表达式的类型调整为。
但是,它本身是有效的类型,并且发生在C标准库函数等中,在该函数中用于确保参数指针的const正确性:int const*
不能转换为void*
,而是void const*
。
const void
因为返回类型确实会影响函数类型,所以并不是完全没有意义的。
void
没有const
。”