В чем причина различия между setprecision (12) и setprecision (012), например, в c ++? - PullRequest
2 голосов
/ 30 апреля 2010

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

Ответы [ 3 ]

12 голосов
/ 30 апреля 2010

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

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

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

Это никак не связано с setprecision.

5 голосов
/ 30 апреля 2010

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

3 голосов
/ 30 апреля 2010

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

...