2010-04-29 2 views
2

В C++, когда вы пишете setprecision (12), например, 12 находится в базе 10, но когда вы пишете его как setprecision (012), это восьмеричное число, почему?В чем причина различия между setprecision (12) и setprecision (012), например, в C++?

+5

Потому что так оно и есть на C и C++. Другого ответа нет. Интегральные литералы, начинающиеся с '0', являются восьмеричными. – AnT

ответ

12

Поскольку константы с ведущими нулями (кроме ведущих 0x) всегда восьмеричное:

Восьмеричная целочисленный литерал (основание восемь) начинается с цифры 0 и состоит из последовательности восьмеричных цифр.

C++ проект стандарта (n1905) §2.13.1

Это не имеет ничего общего с setprecision.

+0

спасибо за достаточное объяснение. – Nobody

+0

@ Ehsan: нажмите галочку рядом с ответом, чтобы официально сказать это. – Potatoswatter

+0

уже сделал это человек! – Nobody

3

В C++, если целое число буквального начинается с 0 цифрой (и что 0 не следует x), следующие цифры рассматриваются как восьмеричные цифры.

5

Так как это сработало в C. Обратно, когда C был спроектирован, восьмеричные числа часто использовались, поэтому они вставляли в них обозначение. В настоящее время это редко полезно и в основном запутывает.