C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で(int)xの代わりにstatic_cast (x)を使用するのはなぜですか?


(int)xはCスタイルの型キャストであり、static_cast (x)はC++で使用されます。このstatic_cast<>()はコンパイル時チェック機能を提供しますが、Cスタイルのキャストはそれをサポートしていません。このstatic_cast<>()は、C++コード内のどこにでも見つけることができます。そして、このC ++キャストを使用すると、意図がはるかによく伝わります。

キャストのようなCでは、他の型データを指すように型ポインターをキャストできる場合があります。 1つの整数ポインタが文字タイプのデータを指すこともできるように、それらは非常に似ているため、違いは文字が1バイト、整数が4バイトであるということだけです。 C ++では、static_cast <>()はCのようにキャストよりも厳密です。互換性のあるタイプ間でのみ変換します。

サンプルコード

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = (int*)&c; //4-byte

4バイトのポインタでは、割り当てられた1バイトのメモリを指しているため、ランタイムエラーが発生したり、隣接するメモリが上書きされたりする可能性があります。

C ++では、static_cast <>()を使用すると、コンパイラはポインタとデータが同じ型であるかどうかを確認できます。そうでない場合、コンパイル中に誤ったポインタ割り当て例外が発生します。

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = static_cast<int>(&c);

これにより、コンパイル時エラーが発生します。


  1. C++での範囲の追加

    サイズnの配列があり、それが0で初期化され、値kもあるとすると、k個の更新操作を実行します。各操作はトリプレットとして表されます:[startIndex、endIndex、inc]これはサブ配列A [startIndex ... endIndex](startIndexおよびendIndexを含む)の各要素をincでインクリメントします。 k個の操作がすべて実行された後、変更された配列を見つける必要があります。 したがって、入力が長さ=5、更新=[[1,3,2]、[2,4,3]、[0,2、-2]]のような場合、出力は[-2,0]になります。 、3,5,3] これを解決するには、次の手順に

  2. C++でのラインリフレクション

    2D平面上にn個の点があるとすると、指定された点を対称的に反射するy軸に平行な線があるかどうかを確認する必要があります。つまり、指定された線上にすべての点を反映した後に線が存在するかどうかを確認する必要があります。元のポイントのセットは、反映されたポイントと同じです。 したがって、入力がpoints =[[1,1]、[-1,1]]のような場合 その場合、出力はtrueになります これを解決するには、次の手順に従います- 1つのセットを定義します。 n:=ポイントのサイズ minVal:=inf maxVal:=-inf 初期化i:=0の場合、i <