Why is initializing an integer in C++ to 010 different from initializing it to 10?

Solution 1:

Because it's interpreting 010 as a number in octal format. And in a base-8 system, the number 10 is equal to the number 8 in base-10 (our standard counting system).

More generally, in the world of C++, prefixing an integer literal with 0 specifies an octal literal, so the compiler is behaving exactly as expected.

Solution 2:

0 before the number means it's in octal notation. So since octal uses a base of 8, 010 would equal 8.

In the same way 0x is used for hexadecimal notation which uses the base of 16. So 0x10 would equal 16 in decimal.

Solution 3:

In C, C++, Objective C and related languages a 0 prefix signifies an octal literal constant, so 010 = 8 in decimal.

Solution 4:

Leading 0 in 010 means that this number is in octal form. So 010 means 8 in decimal.