【发布时间】:2020-02-07 08:06:44
【问题描述】:
所以我的疑问是, 我正在尝试按值调用, 在运行给定的代码时,当我在 int main() 之后编写函数定义时会发生交换 但是,如果我在 int main() 上方剪切并粘贴函数定义,则不会发生交换。这是为什么呢?
#include<iostream>
#include<string>
#include<vector>
#include<bitset>
#include<fstream>
using namespace std;
#define ADDU 1
#define SUBU 3
#define AND 4
#define OR 5
#define NOR 7
#define MemSize 65536
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main(){
// int a = 20;
// int *p = &a;
// cout<<"P: "<<p<<endl<<"*P gives: "<<*p<<endl<<"&p gives: "<<&p<<endl<<"&a : "<<&a;;
int x,y;
x = 10;
y = 20;
cout<<"Before Swapping: "<<"x: "<<x<<endl<<"y: "<<y<<endl;
swap(x,y);
cout<<"After Swapping: "<<"x: "<<x<<endl<<"y: "<<y<<endl;
}
【问题讨论】:
-
如果没有看到您的包含,和/或您的代码中是否有
using namespace std;,则无法确定,但我的猜测是,在您将其移动到main之后:std::swap正在使用,而不是您的功能。您的函数不进行交换,因为值是按值传递的,而不是按引用传递的,所以它只交换这些变量的副本。 -
@MarshallMathew 由于
using namespace std;,正在使用std::swap(即使您没有包含定义它的标头:它可能已被其他STL标头包含),所以相关阅读:Why is “using namespace std;” considered bad practice?,可能(?)重复:C++ passing by reference or by value? -
伙计们,我们有一个答案部分。谢谢。
-
@LightnessRacesinOrbit "伙计们,我们有一个答案部分。谢谢。" 1) 是的,但我的第一个“答案”只是一个猜测,在问题出现之前编辑以包括缺失的信息。答案应该是答案,而不是猜测。 2)即使在编辑之后,我认为这个问题已经在其他地方(我链接到)有了答案。
-
@AlgirdasPreidžius 如果您只是猜测,最好不要发布任何内容。但是 deffo 不会在无法进行同行评审的 cmets 中这样做。当你已经怀疑你的建议是错误的,那就是双重的坏事。你可以简单地把答案留给那些知道的人,然后继续回答你认为可以回答的另一个问题。 :) cmets 部分不是为了提供解决方案,无论是否自信。干杯。
标签: c++ call-by-value