C++ 中相等运算符中两个 = 之间的空格是不是合法?

Posted

技术标签:

【中文标题】C++ 中相等运算符中两个 = 之间的空格是不是合法?【英文标题】:Is whitespace between the two ='s in an equality operator legal in C++?C++ 中相等运算符中两个 = 之间的空格是否合法? 【发布时间】:2015-04-08 01:18:12 【问题描述】:

我目前正在从“使用 C++ 解决问题”(第 9 期,W. Savitch)中学习 C++。这本书展示了一个while循环的例子。 while 循环如下所示。

while (ans = = 'Y' || ans = = 'y')

    //compound statement

ans 的类型为 char。 布尔表达式似乎正在尝试使用相等运算符,并且在 //compound statement 的上下文中这是有道理的。但是,我一直认为空格在相等运算符中是非法的。即== 是合法的,但= = 是非法的。

当我复制代码并编译它时,我的编译器在遇到 = = 时抛出错误“预期表达式”,就好像我试图将表达式分配给变量一样。我几乎可以肯定这是书中的一个错字。但是,以防万一这本书试图抛出一个曲线球,我想我会问...

非常感谢!

【问题讨论】:

【参考方案1】:

等式运算符中两个 = 之间的空格在 C++ 中是否合法?

没有。 = = 是两个 = 令牌。 == 是一个 == 令牌。当你指的是后者时,你不能使用前者。

【讨论】:

人们可能会补充说,标记化阶段至少在概念上是不同的,并且在任何语义开始之前出现。人类看到忽略=s 之间的空格使程序有意义,但是编译器不能 - 也不允许 - 看到这一点,因为它不会在标记化期间尝试理解程序。 确实试图理解的阶段,otoh,不再看到源头;它看到一系列没有意义的标记。 @T.C.谢谢。所以我坚持错字吗?即在任何情况下都不需要使用= = @PeterSchneider 感谢您提供更多信息!

以上是关于C++ 中相等运算符中两个 = 之间的空格是不是合法?的主要内容,如果未能解决你的问题,请参考以下文章

查看两个字符串是不是为 Anagrams [C++]

C++中判断两个字符串是不是相等,怎么判断

为啥赋值运算符和相等运算符之间没有 1:1 的关系?

如何检查 Lua 中的两个值是不是原始相等?

c++怎么判断两数相等

Javascript 中 ==(相等运算符) 和 ===(严格相等运算符) 区别