首页 > 后端开发 > C++ > C 的 `std::cout` 如何评估参数,为什么顺序很重要?

C 的 `std::cout` 如何评估参数,为什么顺序很重要?

DDD
发布: 2025-01-05 08:18:43
原创
565 人浏览过

How Does C  's `std::cout` Evaluate Arguments, and Why Does Order Matter?

std::cout 中参数求值的顺序

了解 C 语言中函数参数的求值方式对于避免代码中出现意外至关重要。在 std::cout 的上下文中,参数的计算顺序可能会令人困惑,如下例所示:

#include <iostream>

bool foo(double& m)
{
    m = 1.0;
    return true;
}

int main()
{
    double test = 0.0;
    std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << foo(test) <<  "\tValue of test : " << test << std::endl;
    return 0;
}
登录后复制

此代码可能会在调用 foo 之前和之后打印 test 的值功能。但是,输出表明不然:

Value of test is :      1       Return value of function is : 1 Value of test : 0
登录后复制

此行为是由于表达式中未指定的求值顺序造成的。虽然首先计算最右边的参数(test 的值)似乎很直观,但这并不能保证。

为了确保所需的计算顺序,请显式地将表达式拆分为单独的语句,如下所示如下所示:

double value = test;
std::cout << "Value of test is : \t" << value << "\tReturn value of function is : " << foo(test) <<  "\tValue of test : " << test << std::endl;
登录后复制

这确保了在调用 foo 函数之前将 test 的值复制到 value 中。因此,输出现在准确地反映了预期的评估顺序:

Value of test is :      0       Return value of function is : 1 Value of test : 1
登录后复制

以上是C 的 `std::cout` 如何评估参数,为什么顺序很重要?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板