用if语句赋值引用?



在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
}

最新更新