显式类型转换运算符:()

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();
}

Output

x = 20, y = 10
x = 0, y = 0

使用 CONSTANT,尽管前面的示例演示显式类型转换,则习惯对对象的这些转换。 下面的代码片段演示此:

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 );

前面的示例中,使用函数样式转换,演示如何转换两个值 (一 的 x 和一个用于 *y)*对用户定义的类型 Point。

警告

,因为它们重写 C++ 编译器的内置类型检查,谨慎使用显式类型转换。

必须为例如没有 简单类型名称 类型的转换使用 转换 表示形式 (指针或引用类型,)。 对于可表示与 简单类型名称 类型的转换来编写的任一种形式。 请参见 类型说明符 有关的更多信息构成 简单类型名称

在转换中的类型定义是非法的。

请参见

参考

后缀表达式

C++运算符

运算符优先级和结合性