В c ++, когда вы пишете setprecision (12), например, 12 лежит в основе 10, но когда вы пишете его как setprecision (012), это восьмеричное число, почему?
Поскольку константы с ведущими нулями (кроме нуля в начале) всегда восьмеричные:
Восьмеричное целое число (база восьмое) начинается с цифры 0 и состоит из последовательности восьмеричных цифр.
Проект стандарта C ++ ( n1905 ) §2.13.1
Это никак не связано с setprecision.
Потому что именно так это и было в Си. В те времена, когда С был спроектирован, восьмеричные числа часто использовались, поэтому они указывали на них. В настоящее время это редко полезно и в основном сбивает с толку.
В C ++, если целочисленный литерал начинается с цифры 0 (а за 0 не следует x), следующие цифры обрабатываются как восьмеричные цифры.
0
x