簡體   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