2016-10-06 11 views
-4

次のコードは、浮動小数点型7.5を整数値7に変換し、余りが失われます。ここで、型キャスト演算子はintです。私はそれがC++で有効な型キャストであることを知っています。C/C++での明示的な型キャスト演算子

int main() 
{ 
     int i; 
     float f = 7.5; 
     i = (int) f; // Valid in C/C++ 
} 

しかしC/C++で同じことを行うための別の方法は、タイプ別に変換する式を前の括弧の間の発現を囲む関数表記使用することです:

i = int (f); // It is worked in C++ but not C 

そうに、私は質問があるそれはCで型キャストする有効な方法+ +ですか?

+3

あなたはそれを試してみましたか?それは動作しましたか? –

+0

もこちらをご覧ください:http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-const-cast-and-reinterpret-cast-be-used – xtofl

+0

C/C++はありません言語。これはC++の型キャスト構文の1つで、このようなことを尋ねる前に本を読んでください。http://en.cppreference.com/w/cpp/language/explicit_cast http://stackoverflow.com/q/7558837/995714 –

答えて

2
i = int (f); 

はC99標準、6.5.4キャスト演算子からC++ではなくC.

0123有効です。
cast-expression: 
     unary-expression 
     (type-name) cast-expression 

C++は、上記鋳造の形だけでなく、関数スタイルのキャストをサポートしています。関数型キャストは、オブジェクト上に構築する型のコンストラクタを呼び出すようなものです。

CおよびC++を使用してコンパイルされた次のブロックコードを確認してください。

#include <stdio.h> 

int main() 
{ 
    float f = 10.2; 
    int i = int(f); 

    printf("i: %d\n", i); 
} 

非稼働Cプログラム:http://ideone.com/FfNR5r

ワーキングC++プログラム:http://ideone.com/bSP7sL

2

これはC++です。それが有効であるが、しかし、(Cではなく)C++は、あなたの鋳造に明示を奨励:

(ああ、代わりにエラーが発生しやすいのprintfの種類安全なストリームを使用します。

std::cout << i << "\n"; 
+0

良い答え。私はstatic_castを使用して型の安全性の向上について言及したいと思います。 – Elyasin

+0

これはC++で有効ですが、私が間違っていない限り - Cでは有効ではありません。 –

+0

@MartinR、あなたは正しいです。 Cでは有効ではありません。[my answer](http://stackoverflow.com/a/39888307/434551)を参照してください。 –