sta*_*low 3 c++ pass-by-reference pass-by-value
我理解为什么这样可行
#include <iostream>
using namespace std;
int additionFive (int a)
{
a = a - 5;
return a;
}
int subtractFive (int &a)
{
a = a -5;
return a;
}
int main()
{
int local_A = 10;
cout << "Answer: " << additionFive(local_A) << endl;
cout << "local_A Value "<< local_A << endl;
cout << "Answer: " << subtractFive(local_A) << endl;
cout << "local_A = Value "<< local_A << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Answer: 5
local_A Value 10
Answer: 5
local_A = Value 5
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么这种语法变化会改变答案(简单地将算术和打印输出在同一行)
#include <iostream>
using namespace std;
int additionFive (int a)
{
a = a - 5;
return a;
}
int subtractFive (int &a)
{
a = a -5;
return a;
}
int main()
{
int local_A = 10;
cout << "Answer: " << additionFive(local_A) << " local_A Value: "<< local_A << endl;
cout << "Answer: " << subtractFive(local_A) << " local_A = Value: "<< local_A << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Answer: 5 local_A Value: 10
Answer: 5 local_A = Value: 10
Run Code Online (Sandbox Code Playgroud)
您遇到了未定义的行为.第二个版本修改了a您在第二cout次读取的值,在读取之间没有序列点.
第一版:
cout << "Answer: " << subtractFive(local_A) << endl;
// | |
// reads and modifies local_A |
// sequence point
cout << "local_A Value ="<< local_A << endl;
// |
// reads local_A
Run Code Online (Sandbox Code Playgroud)
第二版:
cout << "Answer: " << subtractFive(local_A) << " local_A Value: "<< local_A << endl;
// | |
// reads and modifies local_A reads local_A
Run Code Online (Sandbox Code Playgroud)