【发布时间】:2016-10-09 17:25:48
【问题描述】:
我在最新的 C++ 标准草案 (N4606) 中遇到了“cv void”类型:
8.3.3 [dcl.mptr],第 3 段
指向成员的指针不应指向类 (9.2.3) 的静态成员、具有引用类型的成员、或“cv void”。
通过一些研究,我发现“cv void”是一个真实的类型,但我不知道与类型void有什么区别。你能用一个例子(也许用代码)解释一下吗?
编辑:
- 我期望的 cv 代表 cv-qualified。我的问题是,为什么我们需要对 void 类型进行“cv-qualify”?
- 我之所以说“cv void 是一个真正的类型”,是因为标准实际上定义了它:
3.9.1 [basic.fundamental],第 9 段
类型 cv void 是无法完成的不完整类型;这样的类型有一组空值...
【问题讨论】:
-
const volatile void. -
更确切地说,
void带有const或volatile限定符。 -
cv 限定的 void 有什么意义?
-
@Il-seobBae 只是为了支持
const void* p = &something;。例如。void *memcpy(void *dest, const void *src, size_t n);. -
@Il-seobBae 这一点也不奇怪。成员指针没有“空转义”。使用成员指针,您必须知道成员的确切类型。 C 没有成员指针,所以我们需要向后兼容 C 的论点在这里不适用。
标签: c++ c++11 language-lawyer