Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматичекое преобразование типа 
V
    Опции темы
hoz
Дата 13.7.2013, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



 Читаю книгу. Написано:
Файл math.h содержит информацию, которая даёт указание компилятору преобразовать величину year во временное представление double перед вызовом функции.
Вот участок кода к этой ситуации:
Код

amount = principal * pow(1.0 + rate, year)

Неужели любая из библиотечных функции способна так легко произвольно и без запроса на это изменять типы переменных пользовательских функции ?
PM MAIL   Вверх
mes
Дата 14.7.2013, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hoz @  13.7.2013,  21:58 Найти цитируемый пост)
 и без запроса на это изменять типы переменных 

есть набор правил преобразований как для стандартных типов , так и для пользовательских..  и при приведении используйутся только эти правила и никакого фривольства ))



--------------------
PM MAIL WWW   Вверх
hoz
Дата 14.7.2013, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



Цитата(mes @  14.7.2013,  00:14 Найти цитируемый пост)
есть набор правил преобразований как для стандартных типов , так и для пользовательских..  и при приведении используйутся только эти правила и никакого фривольства ))

Хм. Ну и как начинающему программисту или вообще программисту об этом узнать? Где смотреть?

Я что-то вот чаще задаюсь вопросом, что нужно для тех или иных задач учитывать... Вот тут, например, казалось бы, возводи pow-функция в степень заданный операнд, ан нет.. оно ещё и приводит к типу.

Это же лишняя операция, которая может быть не нужна в определённое время! Зачему?
PM MAIL   Вверх
mes
Дата 14.7.2013, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hoz @  13.7.2013,  23:42 Найти цитируемый пост)
Хм. Ну и как начинающему программисту или вообще программисту об этом узнать? Где смотреть?

в какой нибудь книжке, например в этой (первая по гуглу) http://www.lib.ru/CPPHB/cppref.txt , R.4 и подпункты..

Добавлено через 4 минуты и 55 секунд
помимо стандартных есть еще пользовательские преобразования.. 


--------------------
PM MAIL WWW   Вверх
hoz
Дата 14.7.2013, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



Цитата(mes @  14.7.2013,  00:51 Найти цитируемый пост)
помимо стандартных есть еще пользовательские преобразования.. 

Вот потому у меня и назрел вопрос. Ведь с пользовательскими всё понятно. Так сказать, преобразование по требованию. А стандартные - преобразование, которое не требуется иной раз, а оно происходит. Это как нежданные гости, которых не ждёшь, а они пришли типа.. Прочту Страуструпа, подумаю. Надеюсь, там будет ответ на мой вопрос. А то изучать дальше, не поняв того, что щяс не понятно, не логично.
PM MAIL   Вверх
mes
Дата 14.7.2013, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hoz @  14.7.2013,  00:16 Найти цитируемый пост)
. А стандартные - преобразование, которое не требуется иной раз, а оно происходит. Это как нежданные гости, которых не ждёшь, а они пришли типа.. 

если не требуется, то не происходит..


--------------------
PM MAIL WWW   Вверх
Фантом
Дата 14.7.2013, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(hoz @  14.7.2013,  02:16 Найти цитируемый пост)

Вот потому у меня и назрел вопрос. Ведь с пользовательскими всё понятно. Так сказать, преобразование по требованию. А стандартные - преобразование, которое не требуется иной раз, а оно происходит.

Происходит оно только в том случае, если требуется. А в целом ответ на вопрос - язык так устроен. Если неявные преобразования типов хочется исключить, надо использовать что-то другое, например, Аду.
PM   Вверх
volatile
Дата 14.7.2013, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Господа, ваши ответы абсолютно точны, конечно, но
мне кажецца, вы не приняли нужный градус понимания новичка.

Цитата(hoz @  13.7.2013,  22:58 Найти цитируемый пост)
amount = principal * pow(1.0 + rate, year)
Неужели любая из библиотечных функции способна так легко произвольно и без запроса на это изменять типы переменных пользовательских функции ? 


hoz, переменная year не меняет типа. Она как была у вас int (или что там), так и останецца int
Никто ей тип не меняет!


Это сообщение отредактировал(а) volatile - 14.7.2013, 12:04
PM MAIL   Вверх
bsa
Дата 14.7.2013, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



hoz, тип переменной в языках С/С++ изменить в режиме исполнения нельзя. Другое дело, что компилятор может менять тип значения переменной. Чтобы не путаться в стандарте языка есть специальные обозначения для этого: rvalue (от right value, есть еще lvalue - left value). Смысл такой, что представим себе простейшую операцию: x = y; Здесь x - lvalue (находится слева), а y - rvalue (находится справа от оператора присваивания). В чем их отличия? Они отличаются тем, что y может быть не только другой переменной, но и сложным выражением, результат которого не хранится ни в одной из переменных, участвующих в выражении. Таким образом, на это выражение накладывается ряд ограничений. В частности, невозможно взять его адрес и присвоить "временной переменной" значение...
Когда ты вызываешь функцию, принимающую параметр типа X, а передаешь значение типа Y, то компилятор пытается сделать преобразование Y -> X или вызвать конструктор X(Y) (для невстроенных типов). Если это возможно, то создается временная переменная (rvalue) типа X и уже она передается в функцию.
PM   Вверх
hoz
Дата 15.7.2013, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



bsa, как я понял, компилятор проводит операции только с переменными одного типа. И что бы провести операцию в том случает, которые я привёл выше, нужно было создать временную переменную переменной year типа double, так?
Как я понял, это, как раз-таки, и будет неявным преобразованием?
Ну и по логике, неявное преобразование будет всегда производится в сторону большей точности, как написал Страуструп.
Вроде как только для переменных чисел такое подходит, например, long duoble в double, а  double в int. Я верно понимаю?
PM MAIL   Вверх
bsa
Дата 15.7.2013, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



hoz, преобразования производятся в обе стороны. Но при понижении точности выдается предупреждение.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.