我有以下代码:
Foo a;
if (some_fairly_long_condition) {
a = complicated_expression_to_make_foo_1();
} else {
a = complicated_expression_to_make_foo_2();
}
我对此有两个问题:
a
是一个const
并且应该这样声明- 无缘无故地调用“空”构造函数
Foo()
(也许这已经被优化掉了?)
修复此问题的一种方法是使用三元运算符:
const Foo a = some_fairly_long_condition?
complicated_expression_to_make_foo_1():
complicated_expression_to_make_foo_2();
这是好的做法吗?你打算怎么做?
最佳答案
回答您问题的第二部分:
我通常将初始化代码放入 lambda 中:
const Foo a = [&]()->Foo{
if (some_fairly_long_condition) {
return complicated_expression_to_make_foo_1();
} else {
return complicated_expression_to_make_foo_2();
}
}();
在大多数情况下,您甚至应该能够省略尾随返回类型,因此您可以编写
const Foo a = [&](){ ...
就第一部分而言:
我想说这很大程度上取决于你的初始化代码的复杂程度。如果所有三个部分都是非常复杂的表达式(而不仅仅是每个函数调用),那么使用三元运算符的解决方案将变得难以阅读,而 lambda 方法(或单独的命名函数)允许您分解这些部分到各自的子表达式中。
关于c++ - 在 if block 内定义 const "variable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38561024/