【发布时间】:2011-08-08 03:48:23
【问题描述】:
是否可以定义一个函数,使参数在返回后引用另一个(已经存在的)对象而不使用指针等?同样,这不能仅仅通过使用复制构造函数或赋值运算符或任何东西来更改现有对象。当函数返回时,外部对象将引用不同的内存块。
例如:
int x;
void change(int& blah) {
blah = x; // I don't want to change blah's value to x's value, I want to make blah refer to x outside the function
}
void main() {
int something = 0;
change(something);
assert(&x == &something);
}
无论使用什么方法,函数都必须像这样调用
change(x);
在调用函数之前不对参数应用任何特殊运算符或函数。我不知道这是否可能,但如果是的话,它将使非常酷的事情成为可能。如果不是,我也想知道为什么。
【问题讨论】:
-
我不知道,我认为唯一的方法是使用指针。将变量传递给函数时,会传递变量的副本,除非您使用指针
-
你所说的那种引用是指针。指针用于“引用...内存块”。在没有指针的情况下这样做似乎是一个矛盾的要求。
-
@sje397:诸如
int x之类的非指针变量仍然指向一块内存。只是它不能指向其他任何东西,也不需要间接(因为x是那块内存,可以这么说)。 -
@Ken 是的,我也是这么想的,但如果它不能指向其他任何东西,那就是这样。不过,请参阅我对詹姆斯回答的其他评论。
-
@Ken - 我明白你的意思,我想你也明白我的意思,但如果你想了解那么多细节,我认为你的例子中的
x指的是 contents 的内存,而指针实际上 确实 引用内存本身。
标签: c++ object-reference