将 constexpr() 与非常量条件组合
Combining if constexpr() with non const condition
>我正在尝试这样的事情:
if( constexpr( TEMPLATE_BOOL_VALUE ) || bOhterBoolValue )
{
Foo();
}
else
{
Baa();
}
我通常为这样的 if 语句使用预处理器宏:
#define IF_COND if( constexpr( TEMPLATE_BOOL_VALUE ) || bOhterBoolValue )
IF_COND
{
Foo();
}
else
{
Baa();
}
在Visual Studio 2017中,这有效(我应该检查但没有检查生成的代码,但编译器接受了这种语法(。
在Visual Studio 2019中,现在出现错误"C2760",因为它只允许:
if constexpr( TEMPLATE_BOOL_VALUE )
{
Foo();
}
else if( bOhterBoolValue )
{
Foo();
}
else
{
Baa();
}
有没有另一种方法可以在不键入两次 Foo(( 的情况下执行此操作?
希望你能帮到忙。我不想得到两个相同的案例。
由于无论TEMPLATE_BOOL_VALUE
是否为真Foo();
分支都是有效的(即编译(,因此无需使用 if constexpr
。
只需使用 if (TEMPLATE_BOOL_VALUE || bOhterBoolValue)
.
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 变量在常量表达式中可用的条件
- 将 constexpr() 与非常量条件组合
- 现代C++编译器是否能够避免在某些条件下两次调用常量函数
- 常量条件的分支预测
- 对常量 wchar_t* 设置条件
- 成员函数的“常量”和非“常量”版本是否符合重载条件
- 是“警告 C4127”(条件表达式是常量)曾经有帮助
- 在什么条件下调用常量取消引用运算符
- 如何避免模板代码中编译时常量条件"conditional expression is constant"警告?
- 循环中的常量条件:编译器优化
- 在 for 循环条件下计算常量
- 为什么比较 constexpr 函数的两个参数不是静态断言的常量条件
- C4127:条件表达式为常量
- 警告C4127:cl命令中的条件表达式为常量
- 条件运算符+上转换+常量引用
- 警告 C4127:条件表达式是常量