2017-09-11 39 views
-1

我有一個代碼,在一行中返回true,在另一行中爲false。std :: is_same <A,B> ::值爲真1行,假2行

例如,

struct Z{ 
    static const int value = 10; 
}; 

struct A : Z{ 
}; 
struct B : Z{ 
}; 

int main(){ 
    if(std::is_same<A,B>::value){ 
     static_assert(std::is_same<A,B>::value , "why am i here?"); 
    } 
    return 0; 
} 

是否有人可以解釋爲什麼它拋出一個靜態斷言錯誤?

+3

因爲'A'和'B'不一樣。 – tkausl

+0

http://en.cppreference.com/w/cpp/language/static_assert – juanchopanza

+0

「if」控制運行時流程。如果您希望僅在運行時檢查,則不要使用靜態斷言,而要使用普通的運行時斷言。編譯後立即對static_assert進行測試,如果其條件不成立,則編譯失敗。 –

回答

5

這是因爲static_assert是一個靜態(即:編譯時)assert。它並不關心上面的if語句(在運行時評估)。

相關問題