假設我有一個這樣的宏:的static_cast <T> VS T(N)的基本類型
#define IS_SIGNED_B(T) (static_cast<T>(-1)<0)
難道是正常的把它寫爲
#define IS_SIGNED_B(T) (T(-1)<0)
知道T是(應該是)永遠是一個基本類型。還有其他一些我需要明確某種特定價值的情況。
我知道這可能會導致問題,對於像情形:
signed char(0);
但知道我已經基本類型Typedef的爲:
typedef signed char Int8;
Int8(0);
是否有比這以外的任何其他問題?基礎類型的構造函數可以被認爲與靜態類型相同嗎?
編輯:我知道std::numeric_limits
和std::is_signed
的存在。這只是一個例子。不是實際的情況。我很抱歉沒有提到這一點。
就我個人而言,我會避免所有這些和我們['std :: numeric_limits :: is_signed'](http://en.cppreference.com/w/cpp/types/numeric_limits/is_signed) – NathanOliver
爲什麼你需要一個當['std :: is_signed'](http://en.cppreference.com/w/cpp/types/is_signed)存在時爲此宏? – Borgleader
你似乎認爲'T(-1)'爲'T == int'調用'T'的構造函數,然而,這只是c風格演員的替代語法,可能被實現爲'static_cast',所以應該沒有區別。 – nwp