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

static_cast <>とCスタイルのキャストの違いは何ですか?


ここでは、static_cast<>と通常のCスタイルのキャストの違いを確認します。

(int)xのような通常のキャストは、static_cast (x)がC++で使用される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. DirectX11とDirectX12の違いは何ですか?

    DirectXは、マルチメディアコンテンツをレンダリングし、グラフィカルハードウェアと通信するためにソフトウェアによって使用されるAPIまたはアプリケーションプログラミングインターフェイスのコレクションです。 DirectXの主要コンポーネントAPIであるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を処理します。すべてのハードウェアが異なるため、関数と呼び出しの標準化されたライブラリを使用してグラフィックカードと通信すると、ゲーム開発がスピードアップします。これはハードウェアアブストラクションと呼ばれ、APIの主な仕事です。 車について考えてみましょう。1台の車を運転

  2. C#での型変換と型キャストの違いは何ですか?

    型変換と型キャストはC#でも同じです。あるタイプのデータを別のタイプに変換しています。 C#では、型キャストには2つの形式があります- 暗黙の型変換 −これらの変換は、C#によってタイプセーフな方法で実行されます。たとえば、小さい整数型から大きい整数型への変換や、派生クラスから基本クラスへの変換です。 明示的な型変換 −これらの変換は、ユーザーが事前定義された関数を使用して明示的に実行します。明示的な変換にはキャスト演算子が必要です。 以下は、doubleをintにキャストする方法を示す例です- 例 using System; namespace Demo {