将引用传递变量赋值给结构成员时会发生什么

What happens when assigning passed-by-reference variable to struct member

本文关键字:成员 什么 结构 引用 变量 赋值      更新时间:2023-10-16

我定义了这个struct:

template<class T>
struct Node {
   T value;
   Node(const T& v) : value(v) {}
};

我想知道当我这样做时到底发生了什么

int i = 3;
Node<int>* my_node = new Node<int>(i);

通过打印出i的地址和my_node->value的地址,我意识到它们不是指同一个地址。我确实期望这种行为,因为强迫我的新指针放在一个特定的地址是没有意义的,能够包装我的引用传递参数!!

但我想知道&的作用是什么?它只是为了确保参数传递给方法时不被复制吗?如果是,那只是为了避免大量复制吗?或者使用&还有其他目的吗?

value(v)value = v简单地复制整个数据类型到一个新的内存空间,不管v是否通过引用传递,我是对的吗?

编辑:我很抱歉我试图缩短我的代码,最终使它模棱两可。刚刚修好了。

这个语句格式错误:Node* my_node = new Node(i);

但是我想知道&的作用是什么?只是为了确认一下吗参数传递给方法时不复制?如果是,那是只是为了避免大量复制(在大数据类型不是int的情况下)在这个例子中)?或者使用&还有其他目的吗?

&在这种情况下,正如你所说的。我使用的一般经验法则是,通过值传递内置(例如int, double),并通过const引用传递其他所有内容,以避免不必要的复制。

和value(v)或value = v只是复制整个数据类型到一个新的无论v是否通过引用传递,内存空间都是I对吧?

这也是正确的。但是对于非内置函数,这两个语句在构造函数中使用时是不同的。第一个是初始化,在初始化列表中完成(在示例中已经完成),后一个是赋值,在构造函数体中完成。对于非内置函数,通常使用初始化列表更有效。否则,在执行赋值操作之前,对象将被默认初始化。