C++通过引用传递不改变参数

Bay*_*ner 2 c++

我一直盯着这个约一个小时,老实说我不知道​​我错过了什么.

#include <iostream>

using namespace std;

void callChain();

double chain(int, int &, int &);

int main()
{
    callChain();
}

void callChain() {
    int totalInches = 53;
    int feet;
    int inches;

    cout << "\nTesting chain for 53 inches: \nExpected result: 15.46 feet: 4 inches: 5" << endl;
    cout << "Actual result: " << chain(totalInches, feet, inches) << " feet: " << feet << " inches: " << inches << endl;
}

double chain(int totalInches, int &feet, int &inches) {
    feet = totalInches / 12;
    inches = totalInches % 12;

    return (feet) * 3.49 + (inches) * .30;
}
Run Code Online (Sandbox Code Playgroud)

返回是正确的,所以很明显功能正常,但对于我的生活,我无法弄清楚为什么脚和英寸不会改变.一切都拼写正确,我有我的所有&符号,但由于某种原因,显示器显示英尺为8英寸为7.我不知道这些数字甚至来自哪里.

Bat*_*eba 5

请记住,这<<是函数调用的合成糖,这些函数的评估顺序不一定按照您认为的顺序.事实上,C++实际上并没有指定顺序.所以你最后部分第二cout打印出的初始值feetinches.

chain(totalInches, feet, inches)在第二个之前调用中间步骤cout,甚至可能以这种方式调用(Acknowledge @DavidSchwartz):

cout << "Actual result: " << chain(totalInches, feet, inches);
cout << " feet: " << feet << " inches: " << inches << endl;
Run Code Online (Sandbox Code Playgroud)