gpt4 book ai didi

c++ - 在定义明确的函数参数列表中传递未初始化的变量吗?

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

我有一些代码基本上可以归结为以下内容:

void bar(bool b, double f)
{
if (b){
double g = f;
}
}

void foo()
{
double f;
bool b = false;
bar(b, f);
}

这里有没有未定义的行为?我怀疑可能是因为我在将 f 传递给 bar 时获取了未初始化的 double 的值拷贝。也就是说,我没有使用传递的 double,因为 if block 将不会运行。

此外,如果我通过引用传递 double 是否一切都很好:

void bar(bool b, double& f)

那么我不是在“使用”一个未初始化的变量,而只是引用它。

最佳答案

是的,行为未定义。在函数参数列表中传递未初始化的 double 时,您正在获取它的值拷贝。

通过引用传递明确定义的,因为您所做的只是将该引用绑定(bind)到那个double。当然,访问该引用的行为是未定义的。

N4140:

[dcl.初始化]

12 ... If an indeterminate value is produced by an evaluation, the behavior is undefined except in the following cases:

(省略不相关的文字,属于无符号窄字符类型)

关于c++ - 在定义明确的函数参数列表中传递未初始化的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27421419/

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