零总是为零,所以没关系.但在最近与我的朋友讨论时,他说今天几乎没有使用八进制文字.然后我突然意识到我的代码中几乎所有的整数文字都是八进制的,即0.
0根据C++语法是八进制文字吗?标准说什么?
Alo*_*ave 295
是的,0是C++中的Octal文字.
根据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
Run Code Online (Sandbox Code Playgroud)
lit*_*adv 44
前缀的任何整数值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
Run Code Online (Sandbox Code Playgroud)