如何解析表达式x- y ?它是一个合法的表达式吗?
How is the expression x---y parsed? Is it a legal expression?
如何解析表达式x---y
?它是一个合法的表达吗?
合法,解析为x--
-
y
我相信前两个减号被解释为后减量运算符,因为它是x
之后合法出现的最长令牌。这样,第三个减号就起减法的作用了。这符合最大值规则[1]
[1]。http://en.wikipedia.org/wiki/Maximal_munch
对于所有数据类型,它被解析为x-- - y
。如果它是class
对象,那么你必须定义后减操作符和减操作符,如果你只定义前减操作符,它会给编译器错误。这意味着,x-- - y
在任何情况下都是强制的。
这与操作符优先级有关。请看这张表。
自减/自增运算符优先于算术运算符。它将解析为x-- - y
。
纠正我的答案:解析器首先匹配最长的令牌,因此选择--
而不是算术-
。导致表达式被解析为x-- - y
(x——)-y;你使用哪个编译器?x和y是什么类型的?
相关文章:
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- void() 是一个有效的C++表达式吗?
- 如何在一个表达式中生成并返回结果?
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 如何将正则表达式向量与一个字符串匹配?
- 为什么一个表达式中的 std::string 连接给出的结果与逐个字符不同的结果?
- 一次包含一个 #include 表达式的多个头文件?
- 在另一个成员函数中调用成员函数时'int'之前的预期主表达式
- 使用折叠表达式构造一个平凡的对象
- 是否有一个上下文表达式`a.b :: c`有意义
- 使用参数包和元组创建一个简单的表达式类
- 可以将算术表达式作为参数传递给一个函数来描述其中的逻辑
- CUDA C++:文件中 kernel.cu 应有一个表达式
- 如果我将 decltype 应用于产生右值的表达式,我是否总是得到一个指针?C++
- 将一个特定字符替换为正则表达式匹配中的另一个字符
- 如何为字符串编写正则表达式,其中包含一个数字至少一个数字,并且不包含任何字母
- constexpr 表达式和变量生存期,G++ 和 Clang 不同意的一个例子