В C++, когда вы пишете setprecision (12), например, 12 находится в базе 10, но когда вы пишете его как setprecision (012), это восьмеричное число, почему?В чем причина различия между setprecision (12) и setprecision (012), например, в C++?
ответ
Поскольку константы с ведущими нулями (кроме ведущих 0x) всегда восьмеричное:
Восьмеричная целочисленный литерал (основание восемь) начинается с цифры 0 и состоит из последовательности восьмеричных цифр.
C++ проект стандарта (n1905) §2.13.1
Это не имеет ничего общего с setprecision.
спасибо за достаточное объяснение. – Nobody
@ Ehsan: нажмите галочку рядом с ответом, чтобы официально сказать это. – Potatoswatter
уже сделал это человек! – Nobody
В C++, если целое число буквального начинается с 0
цифрой (и что 0
не следует x
), следующие цифры рассматриваются как восьмеричные цифры.
Так как это сработало в C. Обратно, когда C был спроектирован, восьмеричные числа часто использовались, поэтому они вставляли в них обозначение. В настоящее время это редко полезно и в основном запутывает.
Потому что так оно и есть на C и C++. Другого ответа нет. Интегральные литералы, начинающиеся с '0', являются восьмеричными. – AnT