明示的な型変換演算子: ()
C++ では、関数呼び出しの構文に似た構文を使用して、明示的な型変換を実行できます。
構文
simple-type-name ( expression-list )
解説
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;
キャストでの変換も関数形式の変換も、1 つの値から変換する場合は同じ結果になります。 ただし、関数形式の構文では、変換に複数の引数を指定できます。 この違いは、ユーザー定義型の場合は重要です。 Point
クラスとその変換を考えます。
struct Point
{
Point( short x, short y ) { _x = x; _y = y; }
...
short _x, _y;
};
...
Point pt = Point( 3, 10 );
関数形式の変換を使用する前の例は、2 つの値 (x の値と y の値) をユーザー定義型である Point
に変換する方法を示しています。
注意
明示的な型変換は C++ コンパイラの組み込みの型チェックをオーバーライドするため、慎重に使用してください。
simple-type-name を持たない型 (たとえば、ポインター型や参照型) への変換には、キャスト表記を使用する必要があります。 simple-type-name で表現できる型への変換は、どちらの形式でも記述できます。
キャスト内の型定義は無効です。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示