C++ 将类成员的地址分配给持久更改的方法变量

C++ 将类成员的地址分配给持久更改的方法变量,c++,pointers,variable-assignment,C++,Pointers,Variable Assignment,我有一个方法,我想在两个数据成员中的一个上迭代运行,在它们之间交替运行。我想做以下几件事 void myClass::alternating_method(){ Graph G; &G = iteration_number%2 ? &A : &B; helper_method_which_modifies(G); iteration_number++; return; } 其中A和B以及迭代编号都是myClass成员,但我不确定它

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

void myClass::alternating_method(){
    Graph G;
    &G = iteration_number%2 ? &A : &B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}
其中A和B以及迭代编号都是myClass成员,但我不确定它是否有效。对我来说这似乎是对的,但这种风格使我感到不舒服。理想的结果是在循环中调用object.alternative_方法,并让它修改object.a和object.B

这样行吗?有更好的办法吗?这会带来意想不到的后果吗?当析构函数超出范围时,是否需要为G调用析构函数

编辑:为了澄清,我指的是helper\u method\u,它被修改为包含多个方法的100行的缩写。修改G的方法主要是boost图方法。现在我看到了答案,似乎最好的办法是让交流发电机在A和B之间进行选择,然后将正确的变量传递给另一种方法。

将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;
}

您是正确的,&operator是operator的地址。但是,您不能为地址搜索分配,例如右值对左值或类似值

您可以做什么呢?将G声明为指针,并使该指针指向a或B:

另一个解决方案,因为您使用C++,是使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;
}

没有真正需要占位符G

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

正如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);
}
它不起作用,因为&G是右值。
void myClass::alternating_method(){
    helper_method_which_modifies((++iteration_number%2) ? A : B);
}