c++ - 在 if block 内定义 const "variable"

标签 c++

我有以下代码:

Foo a;
if (some_fairly_long_condition) {
   a = complicated_expression_to_make_foo_1();
} else {
   a = complicated_expression_to_make_foo_2();
}

我对此有两个问题:

  1. a 是一个 const 并且应该这样声明
  2. 无缘无故地调用“空”构造函数 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/

相关文章:

c++ - 非限定查找和(可能)依赖的基类

c++ - 获取二进制指令的内存地址

c++ - 以老式(和肮脏的)方式填充 vector<char>

c++ - Qt QGraphicsScene原点

c++ - 使用 std::unique 和 vector.erase 删除除了最后一次出现的所有重复元素

c++ - 3D 相机出现意外滚动

c++ - 如何使用 mingw 编译 cryptopp 5.6.2

C++ 问题

c++ - 谷歌测试 Unresolved external 问题

C++ 应用程序找不到 com dll,因为编译器生成的 .tlh 文件具有不正确的 guid