std::is_void
的描述表明:
如果T是类型void,const void,volatile,则提供等于true的成员常量值 void,或const volatile void。
然后可能是const void
还是volatile void
?
This answer表示const void
返回类型无效(但在VC ++ 2015上编译)
const void foo() { }
如果按标准,const void
无效(VC错误) - 那么const void
是什么?
答案 0 :(得分:86)
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
。
For Each i As ListViewItem In .ListView1.Items
.ComboBox1.Properties.Items.Add(i.Text)
Next
答案 1 :(得分:21)
作为void
,const void
是无效类型。但是,如果const void
是 return 类型,const
毫无意义(虽然合法!),因为[expr]/6:
如果prvalue最初的类型为“ cv
T
”,其中T
是cv非限定的非类非数组类型,其类型为 在进行任何进一步分析之前,将表达式调整为T
。
但是,它本身是一种有效的类型,例如在C-standard library functions,它用于确保参数指针的const正确性:int const*
无法转换为void*
,而是void const*
。
答案 2 :(得分:18)
类型可以是模板的结果;模板可能会说明const T
,并使用T
作为void
进行实例化。
链接的答案被误导,或者说更有限,因为它考虑了非模板类型的特殊情况,即使那时const void
可能无意义,但它是有效代码。