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