什么是const无效

What is const void?

本文关键字:无效 const 什么      更新时间:2023-10-16

std::is_void的描述说明:

提供等于tru的成员常数,如果t是类型void,const void,domatile void,或const挥发性void。

那么const voidvolatile void是什么?

此答案指出const void返回类型将无效(但是VC 2015上的编译)

const void foo() { }

如果按标准,const void无效(VC错误) - 那么const void是什么?

const void是一种可以形成指针的类型。它类似于普通的空隙指针,但是转换的工作方式不同。例如,const int*不能隐式转换为void*,但可以将其隐式转换为const void*。同样,如果您有const void*,则不能 static_cast它到int*,但是可以static_castconst 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

作为 voidconst void是一个void类型。但是,如果 const void返回类型,则 const是毫无意义的(尽管法律!),因为[expr]/6:

如果prvalue最初具有" cv T"类型,其中 T是cv Unqualified的非级别,非阵列类型,则类型 在进行进一步分析之前,将表达式调整为T

但是,它是一种有效的类型本身,发生在例如C-标准库函数,用于确保参数指针的const-corments:int const*不能转换为void*,而是void const*

类型可以是模板的结果;模板可能陈述const T,并用T实例化为void

链接的答案被误导了,或者说是有限的,因为它指的是非模板类型的特殊情况,即使如此,const void也可能是毫无意义有效代码