C++ では、is (int) ch は int(ch) と同等です。
そうでない場合、違いは何ですか?
それらは同じものであり、また同じ(int)(ch)
です。C ++では、意図を明確にするために名前付きキャストを使用することが一般的に推奨されます。
static_cast
異なるサイズまたは署名のプリミティブ型間でキャストするために使用しstatic_cast<char>(anInteger)
ます。dynamic_cast
基本クラスを派生クラス(ポリモーフィック型のみ)にダウンキャストするために使用しdynamic_cast<Derived *>(aBasePtr)
ます。例:reinterpret_cast
異なるタイプのポインター間、またはポインターと整数の間でキャストするために使用しますreinterpret_cast<uintptr_t>(somePtr)
。const_cast
を削除するために使用します(非常に危険です)。const
volatile
const_cast<char *>(aConstantPointer)
int(x)
標準では関数スタイルのキャストと呼ばれ、あらゆる点でCスタイルのキャストと同じです(PODの場合)[5.2.3]:
式リストが単一の式である場合、型変換式は、対応するキャスト式(5.4)と同等です(定義において、および意味において定義されている場合)。
コンラッド・ルドルフは正しい。しかし、それを考慮してください
それらは同じです。
2 つの構文は int に対して同じ意味を持ちますが、2 番目のコンストラクター スタイルの構文は、テンプレート内の他の型と共に使用できるため、より一般的です。つまり、"T(x)" は、プリミティブ型間の変換 (たとえば、T = int の場合) またはコンストラクター呼び出し (T がクラス型の場合) にコンパイルできます。これが役に立った私自身の経験からの例は、計算の中間結果にネイティブ型を使用することから、クラスとして実装される任意精度の整数に切り替えたときです。
Adam Rosenfield の回答にリストされている、より長く、より具体的なキャスト方法を優先して、両方のスタイルのキャストが C++ で非推奨になっていることに注意してください。
1 つ目は C スタイルで、2 つ目は C++ スタイルです。
C++ では、C++ スタイルを使用します。
あなたが非常に厄介になりたい場合は、次のように書くと:
#define int(x) 1
次に、(int)x は期待どおりの意味を持ちますが、int(x) は x の任意の値に対して 1 になります。ただし、誰かがこれを行ったことがある場合は、おそらく彼らを傷つける必要があります. また、標準のどこかで #defining キーワードが禁止されていることも確信できますが、今のところ見つけることはできません。
それを除いて、非常に愚かで特殊なケースであり、前に述べたように、[5.3.2]はそれらがPODについて同じであると言います