Тема: Суфікси
Читаю книгу в якій написано необхідність дописувати до типу long суфікс L, а до long long LL. Поясніть навіщо це треба якщо все добре праціє і без суфіксів?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Суфікси
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Читаю книгу в якій написано необхідність дописувати до типу long суфікс L, а до long long LL. Поясніть навіщо це треба якщо все добре праціє і без суфіксів?
Це не треба.
Ось можете почитати це, воно більше схоже на правду. Угорська нотація
Так робили давно, зараз так не роблять. Це я про типи. Але якщо мова йде про поняття важливі для з точки зору предметної області, то то інша річ. Наприклад: rowPosition та colPosition, тут йдеться не про типи змінних, а про їх логічну приналежність/значення.
Це не треба.
Ось можете почитати це, воно більше схоже на правду. Угорська нотація
Так робили давно, зараз так не роблять. Це я про типи. Але якщо мова йде про поняття важливі для з точки зору предметної області, то то інша річ. Наприклад: rowPosition та colPosition, тут йдеться не про типи змінних, а про їх логічну приналежність/значення.
Там не угорська нотація, а запис літералів типу 1L. Але чому це треба робити обов'язково, мені і самому цікаво.
Приходять в голову лише варіанти, коли треба в коді записати дійсно велике число або передати щось до функції, яка перевантажена таким чином, що лонги обробляються принципово інакше за інти. Але все це екзотика.
Бо явне краще за неявне. Це, по-перше, дозволяє іноді уникнути непотрібного перетворення (особливо з double-float-long double), а по-друге, бувають ситуації, де це прямо веде до помилок:
char format[] = "%d %lld %d\n";
...
//був код
long long int x = 5555555;
printf( format, 0, x, 0 ); //змінна x використовується тільки в цьому рядку
//його спростили
printf( format, 0, 5555555, 0 );
//помилка! треба
printf( format, 0, 5555555LL, 0 );
перевірка:
0 5555555 0
0 5555555 -1217326172
0 5555555 0
Ну і про C++11/14 auto не забуваємо:
auto x = 5;//int
auto y = 5LL;//long long int
Оуч, неуважно прочитав запитання, так koala все добре написав.
Можна лише додати, що це зайве перетворення також погіршує швидкодію.
Ну і ось:
cout << 1 / 2.f << endl;
cout << 1 / 2 << endl;
0.5
0
Оуч, неуважно прочитав запитання, так koala все добре написав.
Можна лише додати, що це зайве перетворення також погіршує швидкодію.
Ну і ось:
cout << 1 / 2.f << endl; cout << 1 / 2 << endl;
0.5
0
Краще тоді 2f, а не 2.f. Бо з крапкою працює і без f.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися