有没有办法从函数内部更改外部对象

Set*_*gie 0 c++ object-reference

是否有可能定义一个函数,它将使参数在返回后引用另一个(已存在的)对象而不使用指针等?同样,这不能仅通过使用复制构造函数或赋值运算符或任何东西来更改现有对象.当函数返回时,外部对象将引用不同的内存块.

例如:

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);
}
Run Code Online (Sandbox Code Playgroud)

无论使用何种方法,都必须调用该函数

change(x);
Run Code Online (Sandbox Code Playgroud)

在调用函数之前,不对参数应用任何特殊的运算符或函数.我不知道这是否可行,但如果是这样的话,它会变得非常酷.如果不是,我也想知道原因.

Jam*_*lis 5

不,因为something并且x是不同的对象.它们不涉及不同的对象.它们不指向不同的对象.它们不同的对象.

要改变某些东西指向的地方,那东西需要成为一个指针.如果你有一个指针,你可以这样做:

int x;

void change(int*& p)
{
    p = &x;
}

int main()
{
    int something = 0;
    int* pointer = &something; // pointer points to 'something'
    change(pointer);           // now pointer points to 'x'
    assert(&x == pointer);
}
Run Code Online (Sandbox Code Playgroud)