Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2016, 23:17   #1
Тимох
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 32
По умолчанию Для чего нужен суффикс типа вещественной переменной

Привет всем! Для чего нужен суффикс типа вещественной переменной?
В чем разница между объявлениями переменной с суффиксом и без:
float a=7.56F;
и
float a=7,56;
Тимох вне форума Ответить с цитированием
Старый 27.06.2016, 14:40   #2
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от Тимох Посмотреть сообщение
Привет всем! Для чего нужен суффикс типа вещественной переменной?
В чем разница между объявлениями переменной с суффиксом и без:
float a=7.56F;
и
float a=7,56;
7.56 - литерал типа double
7.56f - литерал типа float
Croessmah вне форума Ответить с цитированием
Старый 29.06.2016, 10:50   #3
Тимох
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 32
По умолчанию

То есть во втором случае происходит сначала преобразование типа, а потом присвоение переменной значения, а в первом - сразу присвоение значения? Следовательно в первом случае программа будет меньше памяти занимать и быстрее работать.
Тимох вне форума Ответить с цитированием
Старый 29.06.2016, 10:58   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Тимох Посмотреть сообщение
То есть во втором случае происходит сначала преобразование типа, а потом присвоение переменной значения, а в первом - сразу присвоение значения?
не совсем.
в первом случае имеет место быть инициализации,
а не присвоению.
хотя для такого примитивного типа, как float,
это не особо принципиально.


а вот во втором случае действительно формально должно произойти преобразование.

если рассмотреть случай по шагам,
то получится нечто вроде:

запись:
Код:
float a=7,56;
компилятор трансформирует:
Код:
float a = float(7,56);
что эквивалентно:
Код:
float a( float(7,56) );
обратите внимание:
переменная а создается путем запуска конструктора копии
от временного объекта,
который был создан от дабла.

и вот здесь умный компилятор догадывается,
что вся эта запись в конечном итоге эквивалентна:
Код:
float a(7,56);
и оптимизирует все преобразования.

переменная сразу инициализируется
усеченным до float значением 7.56
_Bers вне форума Ответить с цитированием
Старый 30.06.2016, 08:03   #5
Тимох
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 32
По умолчанию

Спасибо _Bers!
Тимох вне форума Ответить с цитированием
Старый 30.06.2016, 09:53   #6
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
То есть во втором случае происходит сначала преобразование типа, а потом присвоение переменной значения, а в первом - сразу присвоение значения?
Здесь дело не столько в этом, сколько именно в различии типов.
Например, это может повлият на выбор перегруженной функции,
или на инстанс шаблона:
Код:
#include <iostream>
#include <type_traits>

template<typename T>
void foo(T)
{
    std::cout
        << (std::is_same<T, float>::value?"float":std::is_same<T, double>::value?"double":"other")
        << std::endl;
}



void bar(float)
{
    std::cout << "bar(float)" << std::endl;
}


void bar(double)
{
    std::cout << "bar(double)" << std::endl;
}




int main()
{
    foo(45.6);
    foo(45.6f);
    bar(12.3);
    bar(12.3f);
}
http://rextester.com/NGRK4143
Croessmah вне форума Ответить с цитированием
Старый 09.07.2016, 20:07   #7
Тимох
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 32
По умолчанию

Спасибо Croessmah!
Тимох вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего объявлять переменную общего типа а инициализировать частным guroDragon Общие вопросы по Java, Java SE, Kotlin 6 17.02.2016 03:18
Pascal ABC.Описать функцию Polynom(A,N,X) вещественного типа, находящую значение полинома P в вещественной точке X. sanjer21 Помощь студентам 0 24.05.2012 00:34
ADSL2110EHR для чего он нужен? VintProg Компьютерное железо 2 03.12.2010 10:57
функция malloc() для разного типа переменной. Serjuk Помощь студентам 46 05.01.2010 21:52