¿Por qué la inicialización de un entero en C ++ es 010 diferente de inicializarlo a 10?

Cuando un entero se inicializa como int a = 010 , a se establece realmente en 8, pero para int a = 10 , a se establece en 10. ¿Puede alguien decirme por qué a no está configurado en 10 para int a = 010 ?

Porque está interpretando 010 como un número en formato octal . Y en un sistema de base 8, el número 10 es igual al número 8 en base 10 (nuestro sistema de conteo estándar).

De manera más general, en el mundo de C ++, prefijar un literal entero con 0 especifica un literal octal , por lo que el comstackdor se comporta exactamente como se esperaba.

0 antes del número significa que está en notación octal . Entonces, como octal usa una base de 8 , 010 equivaldría a 8 .

De la misma manera, 0x se utiliza para la notación hexadecimal que usa la base de 16 . Entonces 0x10 sería igual a 16 en decimal.

En C , C++ , Objective C y los lenguajes relacionados, un prefijo 0 significa una constante literal octal , entonces 010 = 8 en decimal.

Liderando 0 en 010 significa que este número está en forma octal. Entonces 010 significa 8 en decimal.