将类成员的地址分配给方法变量以进行持久更改

时间:2012-10-31 13:18:44

标签: c++ pointers variable-assignment

我有一个方法,我想迭代地在两个数据成员之一上运行,在它们之间交替。我想做下面的事情

void myClass::alternating_method(){
    Graph G;
    &G = iteration_number%2 ? &A : &B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}

其中AB以及iteration_number都是myClass成员,但我不确定它是否可行。这似乎对我来说,但风格让我错了。所需的结果是在循环中调用object.alternating_method()并让其修改object.Aobject.B

这会有用吗?有没有更好的办法?会有意想不到的后果吗?我是否需要担心在G超出范围时调用析构函数?

编辑:为了澄清,我的意思是helper_method_which_modifies作为包含多种方法的100行的简写。修改G的主要是升压图方法。现在我看到了答案,看来最好是让alternator除了在AB之间做出选择之外什么也不做,然后将正确的变量传递给另一个方法。 / p>

5 个答案:

答案 0 :(得分:4)

正如Luchian Grigore所说,它不会起作用,因为你需要一个L值。

这个想法很有效,虽然变化不大。

void myClass::alternating_method(){
    Graph& G = iteration_number%2 ? A : B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}

或者进行更多更改:

void myClass::alternating_method(){
    helper_method_which_modifies((++iteration_number%2) ? A : B);
}

答案 1 :(得分:1)

G作为参考:

void myClass::alternating_method(){
    Graph& G = iteration_number%2 ? A : B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}

另一种选择是完全消除G:

void myClass::alternating_method(){
    helper_method_which_modifies(iteration_number%2 ? A : B);
    iteration_number++;
    return;
}

答案 2 :(得分:1)

你是正确的,因为&运算符是地址运算符。但是,您无法分配到某个地址(搜索“rvalue vs. lvalue”或类似内容)。

您可以做什么将G声明为指针,并使该指针指向AB

Graph* G = iteration_number%2 ? &A : &B;

另一个解决方案是,因为您使用的是C ++,所以要使G成为引用

Graph& G = iteration_number%2 ? A : B;

答案 3 :(得分:1)

为什么不在不使用G的情况下调用它?通过这种方式,您无需担心它。

void myClass::alternating_method(){
    helper_method_which_modifies((iteration_number%2 ? &A : &B));
    iteration_number++;
    return;
}

答案 4 :(得分:1)

对占位符G没有实际需要。

void myClass::alternating_method(){
    if(iteration_number%2 == 1) {
        helper_method_which_modifies(A);
    } else {
        helper_method_which_modifies(B);
    }
    iteration_number++;
}