明示的な型変換演算子: ()
C++ では関数呼び出しの構文と同様の構文を使用して明示的な型変換ができます。
simple-type-name ( expression-list )
解説
かっこで囲まれた 式のリスト に続く 簡易名は型 指定された式を使用して特定の型のオブジェクトを構築します。次の例では int を入力するには明示的な型変換を示しています :
int i = int( d );
次の例では 関数呼び出しの結果 で定義されている Point のクラスを変更したを使用します。
使用例
// expre_Explicit_Type_Conversion_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Point
{
public:
// Define default constructor.
Point() { _x = _y = 0; }
// Define another constructor.
Point( int X, int Y ) { _x = X; _y = Y; }
// Define "accessor" functions as
// reference types.
unsigned& x() { return _x; }
unsigned& y() { return _y; }
void Show() { cout << "x = " << _x << ", "
<< "y = " << _y << "\n"; }
private:
unsigned _x;
unsigned _y;
};
int main()
{
Point Point1, Point2;
// Assign Point1 the explicit conversion
// of ( 10, 10 ).
Point1 = Point( 10, 10 );
// Use x() as an l-value by assigning an explicit
// conversion of 20 to type unsigned.
Point1.x() = unsigned( 20 );
Point1.Show();
// Assign Point2 the default Point object.
Point2 = Point();
Point2.Show();
}
出力
x = 20, y = 10
x = 0, y = 0
前の例の定数を使用して明示的な型変換を示していますがオブジェクトでこれらの変換を実行するには同じ手法です。次のコード例にこれを示します :
int i = 7;
float d;
d = float( i );
明示的な型変換は「」のキャスト構文を使用して指定できます。キャスト構文を使用して書き換えられた前の例は次のとおりです :
d = (float)i;
単一の値に変換すると変換関数スタイルのキャストしても同じ結果になります。ただし関数の構文で変換に複数の引数を指定できます。この違いはユーザー定義型にとって重要です。Point のクラスや変換を考慮します :
struct Point
{
Point( short x, short y ) { _x = x; _y = y; }
...
short _x, _y;
};
...
Point pt = Point( 3, 10 );
関数の変換を使用する前の例では2 の値 (1 およびユーザー定義型 Point への x に対してを 1 の y) に変換する方法を示します。
注意 |
---|
C++ コンパイラの組み込み型チェックをオーバーライドするためように明示的な型変換を使用します。 |
キャスト 型 の表記は 単純な名前を 持たない型への変換を使用する必要があります (ポインターまたは参照型など)。 単純な型名 を表現できる型への変換はの形式で記述できます。 単純な型名を 構成する内容の詳細については型指定子 を参照してください。
キャスト内の型定義は無効です。