If 关于编译时常量值的语句
If statements on compile-time const value
我想将代码包含在基于编译时常量值的函数中,但 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>();
}
而且我想保证编译器生成两个函数。一种是 'if(flag) a++' 被编译到函数中,另一种不是。
是否有可能基于 C++17 标准获得此保证,还是我受制于编译器供应商的摆布?
谢谢。
事实上,C++17 确实包含了您所询问的内容 - 它被称为 if constexpr
。
您可以在任何可以在编译时评估条件的地方使用它(例如模板实例化):
class TA {
public:
template<bool flag>
void func() {
if constexpr (flag)
a++;
}
int a;
};
但是,正如其他人所说,在此示例中您不太可能获得太多收益,因为编译器通常可以像这样优化内容。
我想将代码包含在基于编译时常量值的函数中,但 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>();
}
而且我想保证编译器生成两个函数。一种是 'if(flag) a++' 被编译到函数中,另一种不是。
是否有可能基于 C++17 标准获得此保证,还是我受制于编译器供应商的摆布?
谢谢。
事实上,C++17 确实包含了您所询问的内容 - 它被称为 if constexpr
。
您可以在任何可以在编译时评估条件的地方使用它(例如模板实例化):
class TA {
public:
template<bool flag>
void func() {
if constexpr (flag)
a++;
}
int a;
};
但是,正如其他人所说,在此示例中您不太可能获得太多收益,因为编译器通常可以像这样优化内容。