【发布时间】:2015-10-05 16:46:06
【问题描述】:
我定义了这个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 是否通过引用传递,对吗?
编辑:对不起,我试图缩短我的代码并最终使它变得模棱两可。刚刚修好了。
【问题讨论】:
-
首先,引用与地址无关。有时获取引用的地址会产生与其引用的对象相同的地址,有时则不会。但是在您的示例中,您甚至一开始就错了-您的
int value不是引用,而是它自己的对象。 -
请让你的变量名保持一致,我听不懂。
-
@MarkRansom 感谢您的注意。修复它
-
@SergeyA 我试过
cout << &i,不是说i的地址吗??
标签: c++ pointers copy pass-by-reference