gpt4 book ai didi

c++ - 条件分支的模板和优化

转载 作者:行者123 更新时间:2023-12-04 07:27:15 24 4
gpt4 key购买 nike

我是 C++ 和整个模板编程的新手,对不起,这个问题可能有点愚蠢或没有多大意义,但我有以下代码

enum SomeEnum : int {FIRST, SECOND, THIRD, FOURTH};

template<SomeEnum Val>
void Foo(){
... some code ...
int x = 0;
if(Val == FIRST){
x = DoCalculationA();
}
else if(Val == THIRD){
x = DoCalculationB();
}
... some more code that uses 'x', and perhaps some more if checks on Val ...
}
我可以假设编译器会优化掉 if 语句 - 当我调用这个函数时,例如 Foo<FIRST>() ,如果检查 Val,它不会做任何事情?这甚至是使用模板的适当方式,还是我应该将枚举作为参数传递?我的代码需要运行得非常快,所以如果分支存在很大问题,则需要额外的代码。
编辑:
只是为了让它更清楚一点。 Foo 是这样叫的
Bar(SomeOtherEnum someOtherEnum){
switch(someOtherEnum){
case VALUE_1:
Foo<FIRST>();
case VALUE_2:
Foo<SECOND>();
case VALUE_3:
Foo<THIRD>();
default:
Foo<FOURTH>();
}
}

最佳答案

C++ 标准允许 C++ 编译器执行任何没有明显影响的优化。但是,C++ 编译器没有义务这样做。
在您的特定情况下,所描述的优化似乎没有任何可观察到的效果,这是一个相当简单的优化。因此,您的 C++ 编译器很可能不会生成永远不会使用的代码。然而,没有正式要求这样做,因此为了确定是否是这种情况,有必要使用调试器检查编译后的代码。
C++ 编译器是否执行这种优化也通常取决于编译选项。也可以强制编译器的手,强制它避免编译不需要的代码。该方法取决于 C++ 版本。 C++17 最简单的解决方案是 if constexpr .适用于早期 C++ 版本的替代方案通常涉及一些重构和模板特化。

关于c++ - 条件分支的模板和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68150477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com