gpt4 book ai didi

c++ - 难道我们不必将函数的返回值分配给变量吗? C/C++

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:48 25 4
gpt4 key购买 nike

我已经使用 C/C++ 大约三年了,我不敢相信我以前从未遇到过这个问题!

以下代码可以编译(我刚刚尝试使用 gcc):

#include <iostream>

int change_i(int i) {
int j = 8;
return j;
}

int main() {
int i = 10;
change_i(10);
std::cout << "i = " << i << std::endl;
}

而且,程序打印出 i = 10,如您所料。

我的问题是——为什么要编译?我本以为会出现错误,或者至少是警告,说返回了一个未使用的值。

天真地,我认为这与您不小心忘记了非 void 函数中的 return 调用的情况类似。我知道这是不同的,我可以理解为什么这段代码没有任何内在的错误,但它看起来很危险。我刚刚在我的一些非常旧的代码中发现了一个类似的错误,代表一个可以追溯到很久以前的错误。我显然是想这样做:

i = change_i(10);

但是忘记了,所以它从未改变过(我知道这个例子很愚蠢,确切的代码要复杂得多)。任何想法将不胜感激!

最佳答案

它编译是因为调用函数并忽略返回结果是非常常见的。事实上,main 的最后一行也是这样做的。

    std::cout << "i = " << i << std::endl;

实际上是以下的缩写:

    (std::cout).operator<<("i =").operator<<(i).operator<<(std::endl);

...而且您没有使用最终 operator<< 返回的值.

一些静态检查器具有在函数返回被忽略时发出警告的选项(以及用于注释其返回值经常被忽略的函数的选项)。 Gcc 有一个选项可以将函数标记为需要使用返回值 ( __attribute__((warn_unused_result)) ) - 但它仅在返回类型没有析构函数时才有效:-(。

关于c++ - 难道我们不必将函数的返回值分配给变量吗? C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38918798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com