gpt4 book ai didi

c++ - 我可以有条件地选择分配给哪个变量吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:58 25 4
gpt4 key购买 nike

this question基本相同,但对于 C++。

最简单的方法是:

if (condition) {
a = f(x);
} else {
b = f(x);
}

虽然这满足了我的需求,但一直困扰着我的是我不得不重复输入 f(x) 两次,更不用说将代码扩展到这么多行而只执行一行。如果我有更多的目标变量可供选择怎么办?

switch(condition variable) {
case 1:
var1 = f(x);
break;
case 2:
var2 = f(x);
break;
...
case y:
vary = f(x);
break;
}

这在我看来很不优雅。

C++ 中是否有任何本质上允许我执行以下操作的内容?

do-something-that-returns-a-lvalue = f(x);

如果它不被称为左值,请原谅我,我对 C++ 还是比较陌生。但是你们知道我的意思 - 要为其赋值的目标变量。

最佳答案

您可以形成指向要分配的变量的引用或指针。

(condition ? a : b) = f(x);  // reference

以上版本由aschepler建议在评论中。

*(condition ? &a : &b) = f(x);  // pointer

引用版本基本上等同于以下使用辅助函数的更详细的示例。

template <typename T>
T&
conditional_reference(bool pred, T& yes, T& no) noexcept
{
return pred ? yes : no;
}

// And then later

conditional_reference(condition, a, b) = f(x);

我的观点是,就代码清晰度而言,传统的 if then else 控制流可能仍然是最佳选择。

如果赋值的来源是一个比 f(x) 更复杂的表达式,您可以将其结果存储在一个临时变量中,然后只在您的条件中赋值该变量。 C++11 移动语义使得在许多情况下可以接受此类临时对象的使用。

关于c++ - 我可以有条件地选择分配给哪个变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34214745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com