Use*_*ied 1 c++ alias reference
有没有办法初始化对象的引用,然后在另一个对象上重新生成它而不会产生副本?我的意思是:
std::vector < int >& vec1 = someVector;
std::vector < int >& vec2 = someOtherVector:
if ( someCondition )
{
vec2 = someVector;//copying occurs here
vec1 = someOtherVector;
}
Run Code Online (Sandbox Code Playgroud)
相反,我想要的是作为vec2对if 的引用someOtherVector和vec1引用,而不是它们成为副本.不幸的是,有些东西:someVectorsomeCondition
if ( someCondition )
{
std::vector < int >& vec1 = someVector;
std::vector < int >& vec2 = someOtherVector;
}
else
{
std::vector < int >& vec1 = someOtherVector;
std::vector < int >& vec2 = someVector;
}
Run Code Online (Sandbox Code Playgroud)
由于引用的范围仅限于if和else实体,因此会涉及在我的程序中复制大量代码,那么有什么方法可以解决这个问题吗?我在教科书或网上找不到解决办法是不成功的.
初始化后不能重新引用参考; 如你所说,它们是特定对象的别名.
如果条件在初始化时已知,那么您可以使初始化条件有条件:
std::vector<int>& vec1 = someCondition ? someVector : someOtherVector;
Run Code Online (Sandbox Code Playgroud)
否则,请使用指针,或者使用引用将代码重构为另一个函数,如Jerry Coffin的回答中所述.