Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用用户定义文字的成员时发生编译错误_C++_C++11_User Defined Literals - Fatal编程技术网

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 munch
100.0_f.temp
是一个有效的pp号码令牌。更改为
(100.0_f)。temp
@T.C.不知道pp号码令牌可以包含多个点。你能给我举一个这样的例子吗?@T.C.[lex.pptoken]/1似乎暗示
100.0_f.temp
没有通过预处理阶段?@M.M它当然无法转换为token,所以程序的格式不正确。真的。希望这个标准能使代码更容易编写,我从来没有想到 0xe+Foo可能是无效C++,这似乎是错误的…
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 .