6

C++ では、is (int) ch は int(ch) と同等です。

そうでない場合、違いは何ですか?

4

8 に答える 8

19

それらは同じものであり、また同じ(int)(ch)です。C ++では、意図を明確にするために名前付きキャストを使用することが一般的に推奨されます。

  • static_cast異なるサイズまたは署名のプリミティブ型間でキャストするために使用しstatic_cast<char>(anInteger)ます。
  • dynamic_cast基本クラスを派生クラス(ポリモーフィック型のみ)にダウンキャストするために使用しdynamic_cast<Derived *>(aBasePtr)ます。例:
  • reinterpret_cast異なるタイプのポインター間、またはポインターと整数の間でキャストするために使用しますreinterpret_cast<uintptr_t>(somePtr)
  • 変数からまたは修飾子const_castを削除するために使用します(非常に危険です)。constvolatileconst_cast<char *>(aConstantPointer)
于 2008-11-04T19:07:58.877 に答える
10

int(x)標準では関数スタイルのキャストと呼ばれ、あらゆる点でCスタイルのキャストと同じです(PODの場合)[5.2.3]:

式リストが単一の式である場合、型変換式は、対応するキャスト式(5.4)と同等です(定義において、および意味において定義されている場合)。

于 2008-11-04T19:11:13.253 に答える
3

コンラッド・ルドルフは正しい。しかし、それを考慮してください

  • (int) x <-- は C および C++ で有効な構文です
  • (int*) x <-- は C および C++ で有効な構文です
  • int (x) <-- C++ では有効ですが、C では構文エラーが発生します
  • int* (x) <-- C と C++ の両方で構文エラーが発生します
于 2008-11-04T19:34:48.057 に答える
3

それらは同じです。

于 2008-11-04T19:01:41.697 に答える
2

2 つの構文は int に対して同じ意味を持ちますが、2 番目のコンストラクター スタイルの構文は、テンプレート内の他の型と共に使用できるため、より一般的です。つまり、"T(x)" は、プリミティブ型間の変換 (たとえば、T = int の場合) またはコンストラクター呼び出し (T がクラス型の場合) にコンパイルできます。これが役に立った私自身の経験からの例は、計算の中間結果にネイティブ型を使用することから、クラスとして実装される任意精度の整数に切り替えたときです。

于 2008-11-04T19:34:31.053 に答える
1

Adam Rosenfield の回答にリストされている、より長く、より具体的なキャスト方法を優先して、両方のスタイルのキャストが C++ で非推奨になっていることに注意してください。

于 2008-11-05T09:13:14.863 に答える
1

1 つ目は C スタイルで、2 つ目は C++ スタイルです。

C++ では、C++ スタイルを使用します。

于 2008-11-04T18:57:44.827 に答える
-1

あなたが非常に厄介になりたい場合は、次のように書くと:

#define int(x) 1

次に、(int)x は期待どおりの意味を持ちますが、int(x) は x の任意の値に対して 1 になります。ただし、誰かがこれを行ったことがある場合は、おそらく彼らを傷つける必要があります. また、標準のどこかで #defining キーワードが禁止されていることも確信できますが、今のところ見つけることはできません。

それを除いて、非常に愚かで特殊なケースであり、前に述べたように、[5.3.2]はそれらがPODについて同じであると言います

于 2008-11-04T19:16:58.453 に答える