gpt4 book ai didi

c++ - If 关于编译时常量值的语句

转载 作者:行者123 更新时间:2023-11-27 23:50:13 25 4
gpt4 key购买 nike

我想根据编译时常量值将代码包含在函数中,但 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;
};

但是,正如其他人所说,在这个例子中你不太可能获得太多,因为编译器通常可以优化这样的东西。

关于c++ - If 关于编译时常量值的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47014397/

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