Оператор явного преобразования типов: ()
В 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 );
В предыдущем примере, в котором используется преобразование в стиле функций, показано, как преобразовать два значения (один для x и один для y) в определяемый пользователем тип Point
.
Внимание
Явные преобразования типов следует использовать с осторожностью, поскольку они переопределяют встроенную проверку типов компилятора C++.
Нотация приведения должна использоваться для преобразования в типы, которые не имеют простого имени типа (указателя или ссылочных типов, например). Преобразование в типы, которые можно выразить с помощью простого имени типа, можно записать в любой форме.
Определение типа в приведениях недопустимо.
См. также
Постфиксные выражения
Операторы C++, приоритет и ассоциативность
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по