没有括号的C++函数调用

mis*_*nic 2 c++

我在编程时忘记了函数调用后忘记括号,但是我只收到警告,我忽略了:

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

刚做的时候也会发生同样的事情

int i = 0;
i;
Run Code Online (Sandbox Code Playgroud)

为什么这不是编译器错误?

#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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:与没有括号的g ++"调用"函数相反(不是f()而是f;).为什么总是返回1?我不问为什么它被隐式浇铸为数字,但为什么像它确实编译器不提醒我关于if(i=0)if(i==0)

Bat*_*eba 7

您可以将其clearDisplay视为该功能的地址.最后,它将具有非零数值,并且由单个变量组成的语句在语法上是正确的.


Dav*_*rtz 5

这不是编译器错误的原因相同:

for(int i = 0; i < 2; i++){
Run Code Online (Sandbox Code Playgroud)

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

为了有所帮助,当您忽略没有副作用的表达式结果时,编译器会发出警告.但是如果有一个语言规则忽略没有副作用的表达式是违法的,那就需要编译器完美地判断表达式是否有副作用,这基本上是不可能的.