什么是常量无效?

新手上路,请多包涵

std::is_void 的描述指出:

如果 T 是 void、const void、volatile void 或 const volatile void 类型,则提供等于 true 的成员常量值。

那么什么可能是 const voidvolatile void

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

 const void foo() { }

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

原文由 Ajay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 491
2 个回答

const void 是一种可以形成指针的类型。它类似于普通的 void 指针,但转换的工作方式不同。例如 const int* 不能隐式转换为 void* ,但可以隐式转换为 const void* 。 Likewise, if you have a const void* you cannot static_cast it to an int* , but you can static_cast it to a 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

原文由 Benjamin Lindley 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

链接的答案被误导,或者更确切地说,因为它考虑到非模板类型的特殊情况,所以 const void 可能 _没有意义_,但它是 _有效的代码_。

原文由 DevSolar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题