【问题标题】:Understanding what (void) does when placed in front of a function call了解 (void) 放在函数调用前面时的作用
【发布时间】:2022-10-14 23:09:29
【问题描述】:

我的问题是:

  1. 为什么(void) 负责返回不同的值?到底发生了什么?
    struct S {
      int operator,(int) { return 0; }
    };
    std::cout << (S(), 42) << '\n';           // prints '0'
    std::cout << ((void) S(), 42) << '\n';    // prints '42'
    

【问题讨论】:

    标签: c++


    【解决方案1】:

    它将临时的S 转换为void,因此对于(void) S(), 42,将调用内置的逗号运算符,因为逗号运算符将返回第二个操作数42,然后打印出来。

    【讨论】:

      【解决方案2】:

      (void) 在这里用于消除编译器关于不处理来自S() 的返回值的警告。

      由于这是通过逗号运算符完成的:

      ((void) S(), 42)
      

      它将是右侧,42,即表达式的值。

      【讨论】:

        【解决方案3】:

        这里的问题是逗号运算符已重载。

        所以第一行:

        (S(), 42)
        

        将调用此逗号运算符,因为参数是匹配此重载的 Sint

        【讨论】:

          猜你喜欢
          • 2017-08-26
          • 2022-10-04
          • 2012-12-06
          • 2011-03-03
          • 1970-01-01
          • 1970-01-01
          • 2015-10-19
          • 2012-03-09
          • 2022-12-14
          相关资源
          最近更新 更多