繁体   English   中英

如果在编译时声明const值

[英]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;
};

但是,正如其他人所说,在此示例中,您不太可能获得太多收益,因为编译器通常可以优化此类内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM