为什么将x分为++ x将被分为++(+ x),而不是+(+(+ x2b; x2b; x)在c++?
当我键入此代码时,
int x = 1;
+++x;
它会将其分为++(+X)
,当然是错误的,因为++
之后有一个rvalue。
我很好奇为什么它不能+(++ X)
,其中代码是正确的。
这取决于IDE还是编译器?
可以在C ++标准中找到吗?还是只是不确定的行为?
非常感谢您回答这个问题,并原谅我的英语不好。
When I type this code bellow
int x = 1;
+++x;
it would be divided into ++(+x)
, and of course the sentence is wrong cause there's a rvalue after ++
.
I am curious about why it can not be +(++x)
, in which the code is correct.
Is this depend on the IDE or the compiler ?
Can it be find in C++ Standard ? Or it's just a undefined behaviour ?
Thanks a lot to answer this question and forgive my poor English.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
来自C ++ 20(草稿N4860)
[Lex.pptoken] /3.3
和
[lex.pptoken]/6
因此,
+
与变量相关,这是语言的规则,因为++
首先将其分组在一起。有趣的是,这让我想起了一个旧问题,其中:
std :: vector< std :: vector< int>>
用于引起问题的是因为>>
将是一个令牌而不是两个(因为它应该是字符的最长序列)。这是由[temp.names]/3
解决的From C++20 (draft N4860)
[lex.pptoken]/3.3
and
[lex.pptoken]/6
So, it is a rule of the language, that the
+
goes with the variable, because the++
is first grouped together.Funnily, this reminds me of an old problem where:
std::vector<std::vector<int>> a
used to cause problems because>>
would be one token instead of two (since it's supposed to be the longest sequence of characters). This is addressed by[temp.names]/3
这是最大Munch象征化原理的结果:
来自 lex.pptoken#3.3 :
而且由于
++
是最长的有效令牌,因此解析器将表达式视为++++X
。This is a consequence of the maximum munch tokenization principle:
From lex.pptoken#3.3:
And since
++
is the longest valid token, the parser treats the expression as if++ +x
.