C++ C++;传递引用和传递值函数的副作用?
我明白为什么它会这样C++ C++;传递引用和传递值函数的副作用?,c++,pass-by-reference,pass-by-value,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: " <
#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;
}
但是我不明白为什么这种语法的改变会改变答案(只是把算术和打印结果放在同一行)
您遇到了未定义的行为。第二个版本修改在第二个
cout
中读取的a
的值2次,两次读取之间没有序列点
第一版:
cout << "Answer: " << subtractFive(local_A) << endl;
// | |
// reads and modifies local_A |
// sequence point
cout << "local_A Value ="<< local_A << endl;
// |
// reads local_A
第二个代码的行为完全依赖于系统/编译器。在DEV C++中,第二个代码与第一个代码相同。这取决于编译器如何在程序集中生成cout语句…如何修复此未定义的行为以更正此问题?@stackoverflow您不需要这样做。:)您使用第一个版本(两个独立的
cout
语句)而不是第二个版本;一个按引用传递,一个按值传递。那么,你会如何正确地处理这些问题呢。我的目标是在发送第二个函数时更改局部变量。@stackoverflow您的操作是正确的,只是第二个cout
部分出错。@stackoverflow阅读此内容-
#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;
}
Answer: 5 local_A Value: 10
Answer: 5 local_A = Value: 10
cout << "Answer: " << subtractFive(local_A) << endl;
// | |
// reads and modifies local_A |
// sequence point
cout << "local_A Value ="<< local_A << endl;
// |
// reads local_A
cout << "Answer: " << subtractFive(local_A) << " local_A Value: "<< local_A << endl;
// | |
// reads and modifies local_A reads local_A