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

时间:2015-10-05 16:46:07

标签: c++ pointers copy pass-by-reference

我定义了这个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是否通过引用传递,我是对的吗?

编辑:对不起,我试图缩短我的代码并最终使其模糊不清。刚修好了。

1 个答案:

答案 0 :(得分:1)

这个陈述形成错误:Node * my_node = new Node(i);

  

但我想知道&amp ;?的作用是什么?只是为了确保   传递给方法时不会复制参数?如果是,那就是   只是为了避免大量复制(如果是int以外的大数据类型   在这个例子中)?或者是否有另一个使用&amp;?

的目的

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

  

值(v)或value = v只需将整个数据类型复制到一个新数据类型中   内存空间,无论v是否通过引用传递,我都是   正确?

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