使用 if 语句分配引用?
Assigning a reference with if statements?
在 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
}
在 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
}