c++ - это - типы литералов java




0-десятичный литерал или восьмеричный литерал? (2)

Да, 0 - это восьмеричный литерал в C ++.

Согласно стандарту C ++:

2.14.2. Целочисленные литералы [lex.icon]

integer-literal:  
    decimal-literal integer-suffixopt  
    octal-literal integer-suffixopt  
    hexadecimal-literal integer-suffixopt  
decimal-literal:  
    nonzero-digit  
    decimal-literal digit  
octal-literal:  
    0                           <--------------------<Here>
    octal-literal octal-digit

Ноль всегда равен нулю, поэтому это не имеет значения. Но в недавнем обсуждении с моим другом он сказал, что восьмеричные литералы почти не используются сегодня. Тогда мне стало ясно, что на самом деле почти все целочисленные литералы в моем коде являются восьмеричными, а именно 0 .

Является ли 0 восьмым литералом в соответствии с грамматикой C ++? Что говорит стандарт?


Любое целочисленное значение с префиксом 0 - это восьмеричное значение. Т.е.: 01 - восьмеричный 1, 010 - восьмеричный 10, который является десятичным числом 8, а 0 - восьмеричным 0 (который является десятичным, а любой другой - 0).

Так что да, «0» - восьмеричный.

Это простой английский перевод фрагмента грамматики в ответе @ Als :-)

Целое число с префиксом 0x не имеет префикса с 0 . 0x - явно другой префикс. По-видимому, есть люди, которые не могут сделать это различие.

Согласно тому же стандарту, если мы продолжим:

 integer-literal:
     decimal-literal integer-suffixopt
     octal-literal integer-suffixopt
     hexadecimal-literal integer-suffixopt
 decimal-literal:
     nonzero-digit                       <<<---- That's the case of no prefix.
     decimal-literal digit-separatoropt digit
 octal-literal:
     0                                    <<<---- '0' prefix defined here.
     octal-literal digit-separatoropt octal-digit <<<---- No 'x' or 'X' is
                                                          allowed here.
 hexadecimal-literal:
     0x hexadecimal-digit                 <<<---- '0x' prefix defined here
     0X hexadecimal-digit                 <<<---- And here.
     hexadecimal-literal digit-separatoropt hexadecimal-digit




octal