Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
#1

Неявное приведение типов - C++

02.05.2012, 23:33. Просмотров 2511. Ответов 19
Метки нет (Все метки)

Объясните пожалуйста на пальцах, а то всё уже обгуглил. Где говорят - зависит от компилятора или архитектуры, где правила какие-то - объясните.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2012, 23:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неявное приведение типов (C++):

Запретить неявное приведение - C++
Нужна функция с двумя формальными параметрами типа uint64_t, требуется запретить неявное приведение фактических параметров к этому типу,...

Неявное приведение указателей на классы - C++
Всем привет! Обнаружилась вот такая нестыковочка: имеем интерфейсный класс IIn. И имеем класс-наследник ExtIn : public IIn далее...

Запретить неявное приведение возвращаемого значения - C++
Есть функция, возвращающая объект класса, имеющего оператор приведения к uint64_t. Требуется запретить неявное приведение возвращаемого...

Неявное преобразование типов - C++
Здравствуйте, определен класс: template<typename T> class Polynomial { public: explicit...

Неявное преобразование типов - C++
если я правильно понял, то explicit работает таким образом: class abc { int x; public: abc(int x_):x(x_){} ~abc(){} };

Неявное преобразование типов? - C++
есть класс Vector затем с его помощью создается класс Matrix (матрица - массив векторов) дошла очередь до операции умножения матрицы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
02.05.2012, 23:36 #2
Ну если приведение типа возможно то оно будет произведено, например char можно привести к int, а все стандартные типы к bool. Неявным приведение типов называется когда компилятор сам догадывается что вы хотите привести тип и делает это, при этом обычно выдавая предупреждение если неявное приведение типа подозрительно. Что конкретно вас интересует?
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
02.05.2012, 23:54  [ТС] #3
Например при присваивании
C++
1
char i = 256;//А на char у нас есть только 8 бит.
Что тут происходит? а что при
C++
1
i=1560;
Общий принцип я понял, что меньший к большему.

Добавлено через 15 минут
Также непонятно, какие типы платформно-зависимые?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 00:10 #4
Все типы зависят от платформы, кроме char.
1 == sizeof( char ) <= sizeof( short int ) <= sizeof( int ) <= sizeof( long int ) <= sizeof( long long int )

Добавлено через 40 секунд
Цитата Сообщение от zzz_ Посмотреть сообщение
Что тут происходит? а что при
Происходит переполнение.
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:13  [ТС] #5
Просто мне странно, что C# к примеру при замере указателя на int выдает 4 байта. А Borland C++ - 2 байта.

Добавлено через 27 секунд
Цитата Сообщение от Toshkarik Посмотреть сообщение
Все типы зависят от платформы, кроме char.
1 == sizeof( char ) <= sizeof( short int ) <= sizeof( int ) <= sizeof( long int ) <= sizeof( long long int )

Добавлено через 40 секунд

Происходит переполнение.
И что записывается?

Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
платформы
Платформы системы или процессора?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 00:17 #6
Цитата Сообщение от zzz_ Посмотреть сообщение
А Borland C++ - 2 байта.
В борланде размер 2 == sizeof( short int ) == sizeof( int ). 4 байта там long int. В большинстве современных компиляторах short int равен 2 байтам а int и long int равны 4 байтам.
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:17  [ТС] #7
А вообще как преобразуются знаковые и беззнаковые типы?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 00:18 #8
Цитата Сообщение от zzz_ Посмотреть сообщение
Платформы системы или процессора?
Скорее от реализации компилятора.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:20 #9
Цитата Сообщение от zzz_ Посмотреть сообщение
Например при присваивании
C++
1
char i = 256;//А на char у нас есть только 8 бит.
Что тут происходит? а что при
C++
1
i=1560;
Общий принцип я понял, что меньший к большему.

Добавлено через 15 минут
Также непонятно, какие типы платформно-зависимые?
в вашем случае присходит переполнение переменной. компилятор отсечет старшие биты, т.е. оставит в переменной остаток от деления по модулю исходного числа на значение диапазона(256 для char).
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 00:20 #10
Цитата Сообщение от zzz_ Посмотреть сообщение
И что записывается?
Ну как я понял, например, при unsigned char a = 257 "а" будет равна 1.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:22 #11
Цитата Сообщение от zzz_ Посмотреть сообщение
А вообще как преобразуются знаковые и беззнаковые типы?
под преобразованием вы имете ввиду, как ведет себя компилятор в случае переполнения?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 00:22 #12
Цитата Сообщение от zzz_ Посмотреть сообщение
А вообще как преобразуются знаковые и беззнаковые типы?
Тут я Вам посоветую почитать о представлении знаковых чисел в компьютерных системах.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:23 #13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну как я понял, например, при unsigned char a = 257 "а" будет равна 1.
delete
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:25  [ТС] #14
Цитата Сообщение от Toshkarik Посмотреть сообщение
Тут я Вам посоветую почитать о представлении знаковых чисел в компьютерных системах.
Ну вроде старший бит под знак - 1 есть знак, 0 - нет знака. Или наоборот?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 00:26 #15
Цитата Сообщение от antoha398 Посмотреть сообщение
правильный ответ 0 =)
Правильный ответ 1.
Так как верхняя граница равна 255.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 00:26
Привет! Вот еще темы с ответами:

Продемонстровать неявное преобразование типов: из целого в вещественный и обратно - C++
Помогите решить задачи по С++, никак не могу, вся надежда только на вас. 1. Даны вещественные и целые числа. Наглядно продемонстрируйте...

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...

Приведение типов. - C++
Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел). Необходимо реализовать приведение типов Matrix...

Приведение типов - C++
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов. Пример: newType_cast&lt;T&gt;(“123”); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.05.2012, 00:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru