C++ 为什么在这种情况下,当;互换;函数是在int main()之后而不是之前编写的?
所以我的怀疑是, 我试着按值调用, 在运行给定代码时,在int main()之后编写函数定义时会发生交换 但是如果我剪切并粘贴int main()上面的函数定义,则不会发生交换。为什么呢C++ 为什么在这种情况下,当;互换;函数是在int main()之后而不是之前编写的?,c++,call-by-value,C++,Call By Value,所以我的怀疑是, 我试着按值调用, 在运行给定代码时,在int main()之后编写函数定义时会发生交换 但是如果我剪切并粘贴int main()上面的函数定义,则不会发生交换。为什么呢 #include<iostream> #include<string> #include<vector> #include<bitset> #include<fstream> using namespace std; #define ADDU 1 #
#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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#定义ADDU 1
#定义SUBU 3
#定义和4
#定义或5
#定义NOR 7
#定义MemSize 65536
无效掉期(整数a、整数b)
{
内部温度=a;
a=b;
b=温度;
}
int main(){
//INTA=20;
//int*p=&a;
//cout您的swap函数并没有真正交换任何东西,因为它通过值而不是引用获取其参数。您所做的只是操作该函数的局部变量
当您在main
之后才引入它时,调用它时它不在范围内,因此使用std::swap
。std::swap
工作正常
虽然您没有明确地说std::swap
,但您使用名称空间std;
编写了,这删除了该要求(不这样做的理由很好!!)。而且,尽管您没有#include
,但您无法保证哪些标准头可能会因为实现的构造方式而最终包含其他头。如果不查看您的include和/或代码中是否有使用名称空间std;
,则无法确定,但我猜,在您将其移动到正在使用的是main
:std::swap
,而不是您的函数。您的函数不进行交换,因为值是通过值传递的,而不是通过引用传递的,所以它只交换这些变量的副本。@MarshallMathew由于使用命名空间std;
,所以正在使用std::swap
(即使您没有包含标题,标题定义了它:它可能已被其他STL标题包含),因此相关阅读:,以及可能的(?)重复:各位,我们有一个答案部分。谢谢。@LightnessRacesinOrbit“各位,我们有一个答案部分。谢谢。”1)是的,但我的第一个“答案”在编辑问题以包含缺少的信息之前,这只是一个猜测。答案应该是答案,而不是猜测。2)即使在编辑之后,我认为这个问题在其他地方已经有了答案(我链接到了).@AlgirdasPreidžius如果你只是猜测,最好不要发表任何东西。但是deffo不要在评论中这样做,因为它不能被同行评议。当你已经怀疑你的建议是错误的,那就太糟糕了。你可以把答案留给那些知道的人,然后转到另一个你认为可以回答的问题omments部分不提供解决方案,不管是自信还是其他。干杯。非常感谢。@MarshallMathew没问题