为啥在 C++ 中的类中不需要“&”引用?
Posted
技术标签:
【中文标题】为啥在 C++ 中的类中不需要“&”引用?【英文标题】:Why '&' reference in not required in classes in C++?为什么在 C++ 中的类中不需要“&”引用? 【发布时间】:2017-08-18 00:07:17 【问题描述】:在下面的代码中使用了引用调用进行交换
#include <iostream>
#include <conio.h>
using namespace std;
void swap(int& c,int& d)
int temp;
temp=c;
c=d;
d=temp;
int main()
int a,b;
cout<<" Enter value of a";
cin>>a;
cout<<"\n Enter value of b";
cin>>b;
swap(a,b);
cout<<"a: "<<a;
cout<<"\n b:"<<b;
return 0;
但是如果我使用类并创建对象,那么在调用方法时不需要'&'引用。
#include <iostream>
#include <conio.h>
using namespace std;
class swapy
public:
int a;
int b;
void swap(int c,int d)
int temp;
temp=c;
c=d;
d=temp;
;
int main()
swapy s;
cout<<" Enter value of a";
cin>>s.a;
cout<<"\n Enter value of b";
cin>>s.b;
swap(s.a,s.b);
cout<<"a: "<<s.a;
cout<<"\n b:"<<s.b;
return 0;
您能解释一下这是如何工作的吗?为什么 & 在第二个程序中不需要。
【问题讨论】:
第二个程序似乎在利用std::swap
并且根本没有调用您的方法
这两个程序根本不做同样的事情。
这个函数void swap(int c,int d)
什么都不做。参数是函数的本地副本,实际的 c 和 d 不会改变。
你的swapy::swap
坏了,因为你不使用&
,你只是不调用那个函数
这是一个教科书示例,说明为什么您不在程序中使用using namespace std
。
【参考方案1】:
首先你没有调用你的类swap()
函数,因为你没有用你的类对象s调用它,对于类swap()
函数你必须用s调用它。喜欢
s.swap(c,d);
进一步将你的函数 swap()
名称更改为任何其他名称,如 mySwap()
然后你就会知道这是不正确的,因为 swap()
是 std::
的内置函数
因此,如果您更改函数的名称,将很容易理解。
此外,您没有正确使用类成员变量,您必须对类成员变量 a 和 b 做一些事情。你的课在这里没用。
【讨论】:
以上是关于为啥在 C++ 中的类中不需要“&”引用?的主要内容,如果未能解决你的问题,请参考以下文章