【发布时间】:2021-12-28 14:07:20
【问题描述】:
我有一个 non-default-constructibe 结构。
我想根据条件为该结构的对象分配不同的值。
由于该结构是非默认构造的,因此无法声明它的单元化对象。
但是,可以使用三元来做到这一点:
struct foo {
foo(int a);
};
foo generateFoo1() {
return foo(1);
}
foo generateFoo2() {
return foo(2);
}
int main() {
bool test = false;
//compiles fine
foo f = test ? generateFoo1() : generateFoo2();
//the following does not compile
foo f2;
if(test) {
f2 = generateFoo1();
}else {
f2 = generateFoo2();
}
}
三元赋值的“写出”等价物是什么? 我的想法很简单,三元是我眼中的刺。我想让它尽可能干净/可读。
【问题讨论】:
-
foo f = [=]{ if (test) return generateFoo1(); return generateFoo2(); }(); -
您可以使用 lambda 函数作为近似值,但它不会比条件运算符更简洁。
-
条件运算符是干净/可读的选项。
-
如果可读性是目标,那么只需将三元格式格式化为多行。
标签: c++ variable-assignment conditional-operator