【发布时间】:2015-12-11 01:25:42
【问题描述】:
与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++ 还是比较陌生。但是你们知道我的意思 - 要为其赋值的目标变量。
【问题讨论】:
-
您当然可以编写一个返回引用并分配给它的函数。
-
我该怎么做?函数的返回类型应该是什么样的?
-
虽然这不是问题的直接答案,但
fval = f(x); if (condition) a = fval; else b = fval对我来说更易读,同时仍然是干燥的。 -
@Amadan 我理解 DRY 原则,但它一直困扰着我,即使我这样做了,fval 对我来说仍然是一种重复形式。这就是我称之为不优雅的原因——它似乎是一个解决方案,但实际上并非如此。
-
这让我觉得新手使用编号变量而不是数组。如果你有
T vars[size],那么vars[condition_variable] = f(x)。当然你最好用std::vector或std::array