当前位置:   GO > 正文

我可以有条件地选择要分配的变量吗? -博客-wpsshop博客

c++,variable-assignment,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

本质上与此问题相同,但对于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++.但是你们知道我的意思 - 为其分配值的目标变量.



1> 5gon12eder..:

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

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

上述版本由aschepler在评论中提出.

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

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

template 
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,然后else控制流很可能还是在代码的清晰度方面的最佳选择.

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


如果`a`和`b`具有相同的类型,那么普通的`(条件?a:b)= f(x);`会这样做.

2> Brian Rodrig..:

如果您可以在编译时决定分配哪个变量,那么您可以使用这种非常干净且零开销的方法:

std::get(std::tie(var1, var2, var3, var4)) = f(x);

std::get, std::tie

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/GO/detail/953
推荐阅读
相关标签
  

闽ICP备14008679号