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”,其中Tcv是不合格的非类,非数组类型,则T在进行任何进一步分析之前,将表达式的类型调整为。
但是,它本身是有效的类型,并且发生在C标准库函数等中,在该函数中用于确保参数指针的const正确性:int const*不能转换为void*,而是void const*。
const void因为返回类型确实会影响函数类型,所以并不是完全没有意义的。
void没有const。”