在c++中,可以使用条件操作符为引用赋值:
int main (int argc, char *argv[])
{
int i, j;
int &k = (false) ? i : j;
}
是否可以用if-else语句做到这一点?我不知道你怎么能做到,因为你不能重新分配引用。
当然可以,但你可能不想。
int main(int argc, char *argv[])
{
int i, j;
bool cond = false;
int &k = [&]() -> int& { if (cond) return i; else return j; }();
}
或者,如果你对愚蠢的lambda技巧过敏:
int& pickARef(bool cond, int& trueRef, int& falseRef)
{
if (cond)
{
return trueRef;
}
else
{
return falseRef;
}
}
int main(int argc, char *argv[])
{
int i, j;
bool cond = false;
int &k = pickARef(cond, i, j);
}
我觉得这两个都不是个好主意。
不理想,但是当您需要一个可重新分配的引用时,您可以使用std::reference_wrapper
,例如:
#include <functional>
int main (int argc, char *argv[])
{
int i, j;
std::reference_wrapper<int> k;
if (condition)
k = i;
else
k = j;
// use k/k.get() as needed
}
不过,在这种情况下,我将直接使用指针:
int main (int argc, char *argv[])
{
int i, j;
int *k;
if (condition)
k = &i;
else
k = &j;
// use *k as needed
}