c++ - 表达式 "void()"及其在三元条件下的有效性

标签 c++

我试图找出以下代码是否有效(即使在外观上可疑)?

void hello(int, int) {}

int main() {
    int a = 1;
    int b = 2;
    
    a == b
        ? hello(a, b) 
        : void();

    return 0;
}

我没有发现任何暗示这是无效的,它在 clang 和 gcc 上编译得很好。我可以在 SO 上找到的问题是关于 decltype here 上下文中的 void()和 sizeof here .在不同的语境下,它似乎意味着不同的东西。如果有效,我想知道:

  • void() 究竟计算什么,如果它在 全部,到?是否可以将其视为无效果的 void 函数 称呼?只是 void,在这个用例中,给了我一个编译器 错误。
  • 为什么不能简单地省略三元条件的一侧?

最佳答案

What exactly does void() evaluate, if it does that at all, to?

此处,void() 处于语法需要表达式而不是类型的上下文中。因此,它与链接问题 What does the void() in decltype(void()) mean exactly? 中的含义相同。即它是 void 类型的纯右值表达式。

Why is it not possible to simply omit one side of the ternary conditional?

语言的语法不允许这样。

关于c++ - 表达式 "void()"及其在三元条件下的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65000968/

相关文章:

c++ - 为什么调用 boost::split() 会给出这么多警告?

c++ - 如何正确读取套接字消息 (C++)

c++ - 后修复计算器,返回错误值

c++ - 如何将 ANTLR 4 集成到 C++ 应用程序中

c++ - 如何用不同的参数实例化类

c++ - 这是否像 learncpp.com 声称的那样是 GCC 错误?

c++ - 为什么在指针操作中出现访问冲突异常?

c++ - 在 C++ 类中正确设计成员 setter/getter

c++ - 如何用不同数量的默认参数包装一个函数,使其只有一个参数?

c++ - 为什么我们需要使用 std::vector::pointer 来访问元素?