c++ - 对象和基元通过引用传递之间的区别

标签 c++

假设我们有 2 个数字,我们希望使用引用调用的方法来交换它们。它看起来像这样:

int main(){
    int a = 10;
    int b = 20;
    swap(a, b);
}

void swap(int &a, int &b) {
    int tmp = a;
    a = b;
    b = tmp;
}

即使在主方法中,它也会交换 a 和 b 的值,因为它使用引用更改了它。

现在,让我们来看一些示例类“Cat”

class Cat{
public:
    char _name[20];

    Cat(char name[]);
    ~Cat();

    static void meowName(Cat &cat);
};

所以我想,当我们传递引用(地址)时,我可以这样做:

void Cat::meowName(Cat &cat){
    Cat *pCat = cat; // as variable Cat should be an address already
    printf("My name is: %s\n", pCat->name);
}

当然,我需要执行*pCat = &cat 但到底为什么呢? 我们实际上不是传递变量的地址,而只是传递对象本身而不是变量的拷贝吗?

P.s.不介意 meowName 方法,我想了解按实例调用方法和按引用调用方法之间的区别。 :)

谢谢

最佳答案

实际上,通过引用传递与通过指针传递不同,引用是变量的第二个名称

int a = 2;
int & b = a;

在这种情况下,b不是指针,它是变量a的第二个名称,即具有单个内存地址的同一变量,可以通过两个名称访问,所以你不能这样做

int * c = b; //this is wrong

希望这有帮助

关于c++ - 对象和基元通过引用传递之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50388812/

相关文章:

c++ - 执行 rapidjson 的 Document 对象的拷贝

c++ - 您可以在同一对象中拥有对成员 std::shared_ptr<variable> 的成员引用吗?

c++ - c++ 和 node.js 之间的 RSA 加密

c++ - 自制字符串类中的异常

c++ - 折叠表达式和空参数包 : what's the expected result?

c++ - 在 Eigen 中获取大矩阵的行列式时避免数值下溢

c++ - 使用友元类隐藏私有(private)静态回调方法

c++ - 如何创建一个从两侧都可见的四边形?

c++ - 安全清除内存并重新分配

c++ - 什么内存用于在方法或函数之外声明的变量