[英]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.