我希望基于编译时常量值将函数包含在函数中,但static_if不是C ++中的构造。
所以我可以写这样的函数
class TA {
public:
template<bool flag>
void func() {
if(flag)
a++;
}
int a;
};
int main() {
TA a;
a.func<true>();
a.func<false>();
}
我想保证编译器有两个功能。一个如果(标记)a ++&#39;被编译成函数,而不是函数。
是否有可能基于C ++ 17标准获得此保证,或者我受编译器供应商的支配?
感谢。
答案 0 :(得分:3)
实际上,C ++ 17确实包含了你所询问的内容 - 它被称为if constexpr
。
您可以在编译时评估条件的任何地方使用它(例如模板实例化):
class TA {
public:
template<bool flag>
void func() {
if constexpr (flag)
a++;
}
int a;
};
然而,正如其他人所说,在这个例子中,你不太可能获得太多收益,因为编译器经常可以优化这样的东西。