gpt4 book ai didi

c++ - 在同一语句中调用的 IO 执行函数 : Undefined or unspecified?

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

我开始从 C++ Primer(第 5 版)学习 C++。通过学习表达式一章,我想到了一个让我好奇的示例程序:

int f1()
{
cout << "f1\n";
return 1;
}

int f2()
{
cout << "f2\n";
return 2;
}

int main() {
int i = f1() + f2();
return 0;
}

我不确定这个程序是调用了未定义的行为还是仅仅是未指定的行为。我知道调用函数 f1f2 的顺序是未指定的。作为副作用,每个函数都会写入标准输出,因此充其量,打印行的顺序是未指定的。在最坏的情况下,这会调用未定义的行为。

我知道答案在 C++ 标准中的某个地方,但就我目前的理解水平而言,它是相当技术性的。将不胜感激更温和的解释。

最佳答案

Unspecified Behavior

The behavior of the program varies between implementations and the conforming implementation is not required to document the effects of each behavior. For example, order of evaluation, whether identical string literals are distinct, the amount of array allocation overhead, etc. Each unspecified behavior results in one of a set of valid results.

Order of Evaluation

[T]here is no concept of left-to-right or right-to-left evaluation in C++. This is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3() due to left-to-right associativity of operator+, but the function call to f3 may be evaluated first, last, or between f1() or f2() at run time.

如果顺序很重要,你就做

int a = f1();
int b = f2();
int i = a + b;

如果顺序不重要,那么代码就完全没问题。

关于c++ - 在同一语句中调用的 IO 执行函数 : Undefined or unspecified?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120763/

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