gpt4 book ai didi

c++ - 具有相同 bool 值的多个编译时检查。如何只检查一次?

转载 作者:行者123 更新时间:2023-11-30 01:14:37 35 4
gpt4 key购买 nike

考虑这段代码:

template <int A, int B, typename T>
struct Object {
static constexpr bool check = A < B;
static constexpr int value = check ? A : A+1;
static constexpr char c = check ? 'a' : 'b';
static constexpr double d = check ? 1.5 : 3.14;
using type = typename std::conditional<check, T, int>::type;
// etc...
};

如何重写上面的代码使得check只需要检查一次?毕竟,它始终是相同的值。一切都必须是 constexpr。

最佳答案

正如@Nawaz 评论的那样,优化毫无意义。不会有任何运行时优势,并且编译器足够智能,可以在编译期间优化条件,因此在编译期间不应有太多开销。

无论如何,只要你同意走模板特化路线,你所设想的都是可能的。您可以将条件拆分为两个单独的特化,并利用它们来确定适用于您的问题的适当 constexpr

template <int A, int B, typename T, bool check = A / B >
struct Object {
static constexpr int value = A;
static constexpr char c = 'a';
static constexpr double d = 1.5;
using type = T;
// etc...
};
template <int A, int B, typename T>
struct Object<A,B,T,false> {
static constexpr int value = A + 1;
static constexpr char c = 'b';
static constexpr double d = 3.14;
using type = int;
// etc...
};

关于c++ - 具有相同 bool 值的多个编译时检查。如何只检查一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895374/

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