const void 返回类型的含义是什么?

问题描述 投票:0回答:3

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
是什么?

c++ c++11 c++14 void
3个回答
98
投票

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

23
投票

void
一样,
const void
是 void 类型。但是,如果
const void
return 类型,则
const
没有意义(尽管合法!),因为 [expr]/6:

如果纯右值最初具有类型“cv

T
”,其中
T
是 cv 未限定的非类、非数组类型,则 在进行任何进一步分析之前,将表达式调整为
T

但是,它本身是一个有效的类型,并且出现在例如C 标准库函数,用于确保参数指针的 const 正确性:

int const*
无法转换为
void*
,但可以转换为
void const*


18
投票

类型可以是模板的结果;模板可能会声明

const T
,并使用
T
实例化为
void

链接的答案被误导,或者更确切地说,其观点受到限制,因为它考虑了非模板类型的特殊情况,即使如此,

const void
可能是无意义,但它是有效代码

© www.soinside.com 2019 - 2024. All rights reserved.