c – decltype(void())和decltype(void {})之间的差异

前端之家收集整理的这篇文章主要介绍了c – decltype(void())和decltype(void {})之间的差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是后续的问题: What does the void() in decltype(void()) mean exactly?.

decltype(void())在上面提到的问题(实际上在答案)中解释了这种情况下的void()意味着什么呢?
另一方面,我注意到decltype(void {})不能编译.

它们之间有什么区别(至少在decltype的上下文中)?
为什么第二个表达式不编译?

为了完整起见,它遵循一个最小的(not-)工作示例:

int main() {
    // this doesn't compile
    //decltype(void{}) *ptr = nullptr;
    // this compiles fine
    decltype(void()) *ptr = nullptr;
    (void)ptr;
}

解决方法

当与sizeof一起使用时,void()被解释为type-id.
当与decltype一起使用时,void()被解释为一个表达式.

我不认为void {}在任何上下文中都是有效的.它既不是有效的type-id也不是有效的表达式.

猜你在找的C&C++相关文章