为啥在 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 坏了,因为你不使用&amp;,你只是不调用那个函数 这是一个教科书示例,说明为什么您不在程序中使用using namespace std 【参考方案1】:

首先你没有调用你的类swap()函数,因为你没有用你的类对象s调用它,对于类swap()函数你必须用s调用它。喜欢

s.swap(c,d);

进一步将你的函数 swap() 名称更改为任何其他名称,如 mySwap() 然后你就会知道这是不正确的,因为 swap()std:: 的内置函数 因此,如果您更改函数的名称,将很容易理解。

此外,您没有正确使用类成员变量,您必须对类成员变量 a 和 b 做一些事情。你的课在这里没用。

【讨论】:

以上是关于为啥在 C++ 中的类中不需要“&”引用?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 静态方法(在不同的类中)(如 Java 的)

为啥我的 javascript 箭头函数在 Edge/IE 中不起作用?

const 引用字段作为 C++ 类中的只读属性

为啥我不能在我的类中内联函数? [复制]

为啥 C++ CLI 索引属性在 C# 中不起作用?

从外部类 C++ 正确调用嵌套类中的函数