Код в учебнике:
long N(0L);
cin >> N;
if(N % 2L)
cout << "Odd";
else
cout << "Even";
Насколько я понимаю именно в этом коде смысла в L нет, а написано в назидание, что дескать "привыкайте", а то будет плохо.
Не может ли кто привести пример кода где число с неприписанной к нему L вызывает ошибку? Особенно в визуал студии, где лонг и инт равны.
Другие языки программирования и технологии
C++, какой смысл приписывать к числам букву L? (long N(0L), N % 2L) Чем грозит неприписывание? Особенн в Visual studio.
Они равны не в Visual Studio, а на 32-разрядной операционной системе Windows. Но так бывает не всегда.
Конкретно в этом примере ошибка не возникнет, как не крути. Но вообще считается хорошим тоном писать код так, чтобы не было неявных преобразований типов.
На 16-битных машинах с дополнительным кодом, например, 32767 + 1 != 32767L + 1 (число слева вообще отрицательное).
На 16-битных машинах с дополнительным кодом, например, 32767 + 1 != 32767L + 1 (число слева вообще отрицательное).
Раз хотите пример, где это приниципиально, то вот скриншот:
На практике так:
Win32, Win64: sizeof(long) = sizeof(int) = 4
UNIX-like: sizeof(int) = 4, sizeof(long) = разрядность программы
Разрядность программы по определению равна размеру "обычного" указателя.
Значит, у меня 64-битная UNIX-like система.
А книжка могла быть написана еще во времена 16-битной винды, кстати. В любом случае, неявное преобразование типов - зло, но часто этому правилу не следуют, потому что правила хорошего тона в некоторых случаях выполнять накладно.
ЗЫ: нужно новые правила хорошего тона писать, тип long в мультиплатформенном коде - зло: -) У него самая хаотическая разрядность. Обычные int и long long int в этом плане лучше, если уж typedef-ить свой тип лениво.

На практике так:
Win32, Win64: sizeof(long) = sizeof(int) = 4
UNIX-like: sizeof(int) = 4, sizeof(long) = разрядность программы
Разрядность программы по определению равна размеру "обычного" указателя.
Значит, у меня 64-битная UNIX-like система.
А книжка могла быть написана еще во времена 16-битной винды, кстати. В любом случае, неявное преобразование типов - зло, но часто этому правилу не следуют, потому что правила хорошего тона в некоторых случаях выполнять накладно.
ЗЫ: нужно новые правила хорошего тона писать, тип long в мультиплатформенном коде - зло: -) У него самая хаотическая разрядность. Обычные int и long long int в этом плане лучше, если уж typedef-ить свой тип лениво.

Хорошим тоном считается в явном виде показывать свои намерения в коде. По этой же причине не люблю функции с параметрами по умолчанию. Для инициализации например double переменных тоже всегда пишу в явном виде:
double a = 1; //ошибки не будет
double b = 1.0; //здесь сразу видно, что работаем с вещественным типом.
А если переменная инициализируется гораздо позже своего объявления, то когда читаешь чужой код нужно будет дополнительное время, чтобы разобраться с её типом.
c = 0; // Эта переменная какого типа? Целого?
d = 0.0; // тут однозначно вещественная переменная, это видно сразу.
Кроме того, если нужно в каком-нибудь выражении использовать константу, то тип константы зависит только от её значения.
double a = 1; //ошибки не будет
double b = 1.0; //здесь сразу видно, что работаем с вещественным типом.
А если переменная инициализируется гораздо позже своего объявления, то когда читаешь чужой код нужно будет дополнительное время, чтобы разобраться с её типом.
c = 0; // Эта переменная какого типа? Целого?
d = 0.0; // тут однозначно вещественная переменная, это видно сразу.
Кроме того, если нужно в каком-нибудь выражении использовать константу, то тип константы зависит только от её значения.
Вова Визер
За точку десятичную я согласен, очень легко сделать ошибку не поставив ее .
Но ведь хоть с L, хоть без L, понятно, что это литерал целого типа.
А пока целое число не превышает максимального для типа инт, то и ошибки не будет. А при одноразрядных числах оно ведь никак не превысит.
Вы сами всегда пишете L в таких случаях?
Но ведь хоть с L, хоть без L, понятно, что это литерал целого типа.
А пока целое число не превышает максимального для типа инт, то и ошибки не будет. А при одноразрядных числах оно ведь никак не превысит.
Вы сами всегда пишете L в таких случаях?
Похожие вопросы
- Visual Studio C++, ошибка : "не удается найти указанный файл"
- Здравствуйте товарищи программисты хотел спросить. VIsual studio 2022 или Visual Studio Code
- Visual studio c++ помогите пожалуста!!!
- Visual Studio 2010 C++: Как создать оконное приложение?
- Подскажите с чего начать изучение Visual Studio ???(ещё вопросы в метках...)
- Зачем нужен Visual Studio Code?
- Какая разница между Microsoft Visual Studio 2010 и Microsoft Visual C++?
- как в Microsoft Visual Studio 2010 в C# в системе счисления, перевести в десятеричную? Как дополнить код? Помогите плиз
- Visual Studio или MASM
- MS Visual Studio+русские переменные
https://ideone.com/DtWHsQ