定义 if 块内部的常量"variable"
Defining const "variable" inside if block
我有以下代码:
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方法(或单独的命名函数)允许您将这些部分分解为各自的子表达式。
如果问题是避免使用ternay运算符,并且您的目标是定义常数a,则此代码是一个选项:
Foo aux;
if (some_fairly_long_condition) {
aux = complicated_expression_to_make_foo_1();
} else {
aux = complicated_expression_to_make_foo_2();
}
const Foo a(aux);
这是一个很好的解决方案,没有任何新功能(如lambdas),并且根据需要包括内联代码。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- C++ Singleton - Prevent ::instance() to variable
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- "const int <variable>" 不能出现在常量表达式中
- const变量作为非类型模板参数(variable不能出现在常量表达式中)
- 定义 if 块内部的常量"variable"