函数是否返回疯狂值,除非声明并返回了临时值?

时间:2018-10-20 11:20:59

标签: c++

我一直在阅读Bjarne的《编程原理》一书,并尝试过完成此任务。该任务希望用户创建一个专门对每个数字求平方的程序,而无需使用*运算符。听起来很容易吧?但是,在添加以下代码的同时:

#include "../../std_lib_facilities.h"

int square(int value, int ratio);

int main()
{
    for (int i = 1; i < 100; ++i)
    {
        cout << i << " Squared = " << i << " * " << i << " (" << square(i, i) << ")\n";
    }
}

int square(int value, int ratio)
{
    for (int i = 1; i < ratio; ++i)
    {
        value += value;
    }

    return value;
}

返回的值被彻底更改(直到它们离开int变量的范围并返回0)。仅当我添加temp_value并返回如图所示的temp_value时,此情况才会更改:

#include "../../std_lib_facilities.h"

int square(int value, int ratio);

int main()
{
    for (int i = 1; i < 100; ++i)
    {
        cout << i << " Squared = " << i << " * " << i << " (" << square(i, i) << ")\n";
    }
}

int square(int value, int ratio)
{
    int temp_value = value;

    for (int i = 1; i < ratio; ++i)
    {
        temp_value += value;
    }

    return temp_value;
}

这可能很简单,但是我似乎无法弄清楚为什么需要这样做,除非在将其解析为函数时发生某种形式的对象操纵。

1 个答案:

答案 0 :(得分:2)

对于square(4, 4),您的第一个代码是:

 4 +  4 =  8
 8 +  8 = 16
16 + 16 = 32

您的第二秒:

 4 + 4 =  8
 8 + 4 = 12
12 + 4 = 16

我让你弄清楚为什么不自己破坏所有乐趣