C++ 使用用户定义文字的成员时发生编译错误
编译此代码时(不带任何标题) 似乎C++ 使用用户定义文字的成员时发生编译错误,c++,c++11,user-defined-literals,C++,C++11,User Defined Literals,编译此代码时(不带任何标题) 似乎\u f.temp被视为后缀。为什么编译器会这样解析它,而不是在点上停止呢?是奇怪的野兽,指定它们主要是为了使预处理器更容易编写 pp-number: digit . digit pp-number digit pp-number identifier-nondigit pp-number ' digit pp-number ' nondigit pp-number e sign pp-number
\u f.temp
被视为后缀。为什么编译器会这样解析它,而不是在点上停止呢?是奇怪的野兽,指定它们主要是为了使预处理器更容易编写
pp-number:
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number ' digit
pp-number ' nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .
12
是有效的pp号码标记,0xe+foo
(参见[lex.pptoken]/4中的示例)也是有效的pp号码标记,.12.CA'TS_RULE..56.me+owp urr
。如果后两个使其通过转换阶段6,则程序的格式不正确,因为在阶段7中无法将其转换为有效标记。然而,在此之前,它是有效的,因此Maximum munch说我们将0xe+foo
或100.0_f.temp
解析为单个预处理标记。Maximum munch100.0_f.temp
是一个有效的pp号码令牌。更改为(100.0_f)。temp
@T.C.不知道pp号码令牌可以包含多个点。你能给我举一个这样的例子吗?@T.C.[lex.pptoken]/1似乎暗示100.0_f.temp
没有通过预处理阶段?@M.M它当然无法转换为token,所以程序的格式不正确。真的。希望这个标准能使代码更容易编写,我从来没有想到error: unable to find numeric literal operator ‘operator"" _f.temp’
100.0_f.temp;
^
pp-number:
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number ' digit
pp-number ' nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .