В первом случае явное приведение к целому типу без знака с возможной потерей точности в стиле языка программирования C.
Во втором случае то же самое действие достигается в стиле языка C++. Так как в этом языке все типы хотят быть объектами, для встроенных типов это также работает как и конструктор копирования в составных типов (class и struct).
Разницы в результате при этом никакой!
Ввиду того, что возможная потеря точности может в ряде случаев приводить к трудноуловимым ошибкам, в языке C++ были введены абсолютно безобразные конструкции явного приведения, в том числе и для приведения типов, как было указано выше. Синтаксис такого приведения следующий:
int m = static_cast<int>(n);
Такая «угловатая» конструкция позволяет легко находить в коде строки с явным приведением, воспользовавшись автоматизацией поиска в IDE по ключевому слову static_cast
C/C++
Язык С++ : есть ли разница между этими двумя операциями? 1) int m = (int)n; 2) int m = int(n).
Лабеан Нофелет
А они чем безобразные?
А есть ли разница между "Павел Коржов" и "Коржавел Павлов"? +_-
Лабеан Нофелет
Я не Павел Коржов, а я Павел А. Коржов! Не путайте!
1. Это не (!) с++ преобразование, это строго Сишные конструкции, которые не следует применять в плюсах вообще, в плюсах для этого есть *_cast...
2. Преобразования должны быть эквивалентны (см п. 2 https://en.cppreference.com/w/cpp/language/explicit_cast ) , но имхо компилятор может внести свои коррективы. Второй способ, называемый функциональной нотацией преобразования типа ограничен тем, что нельзя откастовать, например, к указателю на int, .т. е. int *(n) невалиден, в отличие от (int *)n;
2. Преобразования должны быть эквивалентны (см п. 2 https://en.cppreference.com/w/cpp/language/explicit_cast ) , но имхо компилятор может внести свои коррективы. Второй способ, называемый функциональной нотацией преобразования типа ограничен тем, что нельзя откастовать, например, к указателю на int, .т. е. int *(n) невалиден, в отличие от (int *)n;
В первой операции использовано приведение типа памяти м к н. Во второй операции полный фиесто! Подучи приоритеты операндов, скобки это круто, меняют приоритеты но не в таких конструкциях
int(n) нельзя а (int)n можно
Похожие вопросы
- При присвоении i++; или ++i; разница есть а вот есть ли разница при присвоении int &i; int& i; int* i; int *i;
- Отразить двумерный массив с размером m x n относительно побочной диагонали
- С++. БЕЗ ИСПОЛЬЗОВАНИЯ АДРЕСОВ И УКАЗАТЕЛЕЙ. Пусть дано натуральное число n и вещественная матрица размером n x 10.
- Помогите пожалуйста с Массивами .В языке С .Заполнил 2-мерный массив N и M случайными числами дальше не понимаю.
- Даны два числа: n и m. Создайте двумерный массив размером n×m и заполните его в соответствии с примером.
- С++ | Надо отсортировать двухмерный массив N*M в порядке возрастания и спадания ПО КАЖДОМУ СТОЛБЦУ ОТДЕЛЬНО
- Найти сумму факториала K=1!+2!...n! нечетных чисел от 1 до n.
- Объсните пожалуйста значение скобок в int(*ptr)[10] и разницу с int(*ptr)[10]=new int[5][10]. (Подробности в описании)
- Сформировать матрицу B(M, N) элементами которой являются случайные числа, равномерно распределенные в интервале (-5, 7
- C++Дана целочисленная матрица размера mn. Найти матрицу, получающуюся перестановкой столбцов