c ++参考函数参数似乎包含原始对象的副本,不充当“真实参考”]]

问题描述 投票:0回答:2

对不起,对于新手问题。 :)

参考函数参数已连接到对象,但是对参考的修改对原始对象无效。

简化代码:

struct dummy{
    int i;
};
dummy arr[4];

// fill array
for(int n=0;n<4;n++){
    arr[n].i = n;
}

void foo(dummy& d){
    d = arr[0];// d.i == 0, so far so good
    d.i += 10; // d.i == 10, but arr[0] is still 0
}

...

dummy p;
foo(p);
p.i += 5; // p.i == 15, but arr[0] is still 0

如果我使用int而不是dummy,很显然原始格式不会更改。但是,如果只是改变了一个对象的属性(对象仍然是相同的),则我认为修改是在原始对象上进行的。但不是。似乎d = arr [0];只是一个副本。为什么?

[我知道,这种情况可以通过指针完成:void foo(dummy ** d){...},但我想知道这种引用行为的原因。如果引用是以经典方式定义的,则它是“真实的”:dummy&a = arr [0],但作为函数参数:no。

对不起,对于新手问题。 :)引用函数参数已连接到对象,但是对引用的修改对原始对象无效。简单代码:struct dummy {...

c++ pass-by-reference
2个回答
4
投票

所以我认为您的误解已经过去了>>

d = arr[0];

0
投票
一旦初始化引用就无法反弹。函数中的引用d指的是用于调用函数的dummy p。当你写
© www.soinside.com 2019 - 2024. All rights reserved.