Правила, перечисленные выше, установлены для встроенных типов. Если же используется оператор, определенный пользователем, то выражение просто преобразовывается в вызов соответствующей операторной функции, определенной пользователем, и порядок действий определяется правилами, установленными для вызова функций. Рассмотрим пример.
class Mine { /* . . . */ };
bool operator==(Mine, Mine);
void f(Mine a, Mine b)
{
if (a==b) { // a==b означает operator==(a,b)
// . . .
}
}
Тип, определенный пользователем, — это класс или перечисление.
Неявное преобразование типа
Целочисленные типы или типы с плавающей точкой могут свободно смешиваться в операторах присваивания и в выражениях. При первой же возможности значения преобразовываются так, чтобы не потерять информацию. К сожалению, преобразования, уничтожающие значение, выполняются также неявно.
Продвижения
Неявные преобразования, сохраняющие значения, обычно называют продвижениями (promotions). Например, перед выполнением арифметической операции для создания типа int из более коротких целочисленных типов выполняется целочисленное продвижение (integral promotion). Это отражает исходную цель продвижений: привести операнды арифметических операций к “естественным” размерам. Кроме того, преобразование значения типа float в значение типа double также считается продвижением.
Продвижения используются как часть обычных арифметических преобразований.
Опубликовал katy
May 01 2015 12:04:34 ·
0 Комментариев ·
2321 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.