1

Тема: Суфікси

Читаю книгу в якій написано необхідність дописувати до типу long суфікс L, а до long long LL. Поясніть навіщо це треба якщо все добре праціє і без суфіксів?

Подякували: Дмитро-Чебурашка1

2 Востаннє редагувалося Yola (09.07.2015 15:10:13)

Re: Суфікси

Це не треба.

Ось можете почитати це, воно більше схоже на правду. Угорська нотація

Так робили давно, зараз так не роблять. Це я про типи. Але якщо мова йде про поняття важливі для з точки зору предметної області, то то інша річ. Наприклад: rowPosition та colPosition, тут йдеться не про типи змінних, а про їх логічну приналежність/значення.

Подякували: leofun011

3

Re: Суфікси

Yola написав:

Це не треба.

Ось можете почитати це, воно більше схоже на правду. Угорська нотація

Так робили давно, зараз так не роблять. Це я про типи. Але якщо мова йде про поняття важливі для з точки зору предметної області, то то інша річ. Наприклад: rowPosition та colPosition, тут йдеться не про типи змінних, а про їх логічну приналежність/значення.

Там не угорська нотація, а запис літералів типу 1L. Але чому це треба робити обов'язково, мені і самому цікаво.

4 Востаннє редагувалося quez (09.07.2015 15:29:46)

Re: Суфікси

Приходять в голову лише варіанти, коли треба в коді записати дійсно велике число або передати щось до функції, яка перевантажена таким чином, що лонги обробляються принципово інакше за інти. Але все це екзотика.

5 Востаннє редагувалося koala (09.07.2015 16:23:46)

Re: Суфікси

Бо явне краще за неявне. Це, по-перше, дозволяє іноді уникнути непотрібного перетворення (особливо з 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

6 Востаннє редагувалося Yola (09.07.2015 16:24:40)

Re: Суфікси

Оуч, неуважно прочитав запитання, так koala все добре написав.

Можна лише додати, що це зайве перетворення також погіршує швидкодію.

Ну і ось:

    cout << 1 / 2.f << endl;
    cout << 1 / 2 << endl;

0.5
0

7

Re: Суфікси

Yola написав:

Оуч, неуважно прочитав запитання, так koala все добре написав.

Можна лише додати, що це зайве перетворення також погіршує швидкодію.

Ну і ось:

    cout << 1 / 2.f << endl;
    cout << 1 / 2 << endl;

0.5
0

Краще тоді 2f, а не 2.f. Бо з крапкою працює і без f.