2016-12-22 15 views
2

std::is_convertibleを使用する:std :: is_convertibleはいつプリミティブ型をコンバーチブルと考えますか?

bool i2c = std::is_convertible<int, char>::value; 
bool c2i = std::is_convertible<char, int>::value; 
bool f2i = std::is_convertible<float, int>::value; 

std::cout << std::boolalpha; 
std::cout << i2c << '\n'; //prints true 
std::cout << c2i << '\n'; //prints true 
std::cout << f2i << '\n'; //prints true 

出力は、彼らがして、コンバーチブルであるように思われた上記のすべてのケースについてtrue、(精度の損失を引き起こす可能性があります型変換)しなければならなかった理由を、私は得ることができませんでした。または、std::is_convertibleを使用してプリミティブ型を比較す​​ることはできませんか?

+4

しかし、それらはすべてコンバーチブルです。あなたが望むなら、 'int'を' char'または 'float'に' int'をキャストできます。なぜあなたはできないと思いますか? – SirGuy

+0

変換可能なとき。 ;) –

+0

@SauravSahuそれはコンバーチブルなので – SirGuy

答えて

6

ページ連結状態:

仮想関数定義{ return std::declval<From>(); }でreturnステートメントは、十分に形成されている、(std::declval<From>()暗黙変換を用いを変換することができる場合には、である)、メンバー定数を提供する場合値はtrueに等しい。

言及したタイプのすべて、すなわち、(コンパイラは警告を発行することができるが)暗黙的に変換されている:

float f = 0.8f 
int i = f; // Legal implicit conversion. 

は完全に合法とうまく形成されています。したがってstd::is_convertible<float, int>::valueが真となります。リストされている比較の残りについても同様です。

関連する問題