不带括号的c++函数调用

C++ function call without brackets

本文关键字:c++ 函数调用      更新时间:2023-10-16

我在编程时遇到了这个问题,忘记了函数调用后的括号,但我只得到一个警告,我忽略了:

main.cpp:7:15: warning: expression result unused [-Wunused-value]
                if (i == 0) clearDisplay;
                            ^~~~~~~~~~~~

在执行

时也会发生同样的事情
int i = 0;
i;

为什么这不是一个编译错误?

#include <iostream>
void clearDisplay(void);
int main(void){
    for(int i = 0; i < 2; i++){
        if (i == 0) clearDisplay;
    }
}
void clearDisplay(void){
    std::cout << "test" << std::endl;
}

编辑:相对于g++ "Calling"不带括号的函数(不是f()而是f;). 为什么总是返回1?我不问为什么它隐式地转换为一个数字但为什么编译器不像if(i=0)if(i==0)那样警告我

可以将clearDisplay作为函数的地址。重要的是,它将具有非零数值,并且由单个变量组成的语句在语法上是正确的。

这和这不是编译错误的原因是一样的:

for(int i = 0; i < 2; i++){

i++。你完全忽略了这个表达式的结果。但这是完全合法的。为什么?因为你可以忽略表达式的结果

为了提供帮助,当您忽略没有副作用的表达式的结果时,编译器会警告您。但是,如果有一种语言规则规定忽略没有副作用的表达式是非法的,那就要求编译器完美地判断表达式是否有副作用,而这基本上是不可能的。

简单解释一下。

和下面的表达式一样:

i;

只是引用变量i而没有对它做任何实际操作,这个表达式:

clearDisplay;

只是指clearDisplay函数,而没有实际调用它。