MaP*_*aPo 1 c++ templates if-statement
我有以下功能
template <bool c>
void func()
{
...
if (c) {
// do something
} else {
// do something else
}
}
Run Code Online (Sandbox Code Playgroud)
该函数将在循环内多次使用:
for (...) {
func<true>();
}
Run Code Online (Sandbox Code Playgroud)
我想知道内部 func 是否在编译时、运行时完成,或者是否留给编译器完成。
编译器可能会也可能不会优化您的代码,因为它知道c编译时的内容。真正了解的唯一方法是查看生成的汇编代码,看看分支是否被删除。也就是说,C++17 引入了constexpr if,它保证在编译时评估条件并丢弃未采用的分支。这会让你的函数看起来像
template <bool c>
void func()
{
// ...
if constexpr(c) {
// do something if c is true, discarded otherwise
} else {
// do something if c is false, discarded otherwise
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |