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++ 中相等运算符中两个 = 之间的空格是不是合法?的主要内容,如果未能解决你的问题,请参考以下文章