我定义了这个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
是否通过引用传递,我是对的吗?
编辑:对不起,我试图缩短我的代码并最终使其模糊不清。刚修好了。
答案 0 :(得分:1)
这个陈述形成错误:Node * my_node = new Node(i);
但我想知道&amp ;?的作用是什么?只是为了确保 传递给方法时不会复制参数?如果是,那就是 只是为了避免大量复制(如果是int以外的大数据类型 在这个例子中)?或者是否有另一个使用&amp;?
的目的
&amp;的作用在这种情况下,就像你说的那样。我使用的一般经验法则是按值传递内置函数(例如int,double)并通过const引用传递其他所有内容以避免不必要的复制。
值(v)或value = v只需将整个数据类型复制到一个新数据类型中 内存空间,无论v是否通过引用传递,我都是 正确?
这也是正确的。但是对于非内置函数,这两个语句在构造函数中使用时会有所不同。第一个是初始化,在初始化列表中完成(在您的示例中已完成),后者是赋值,在构造函数体中完成。对于非内置函数,使用初始化列表通常更有效。否则,在执行赋值之前,对象将默认初始化。