【问题标题】: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 的上下文中这是有道理的。但是,我一直认为空格在相等运算符中是非法的。即== 是合法的,但= = 是非法的。

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

非常感谢!

【问题讨论】:

    标签: c++ whitespace equality-operator


    【解决方案1】:

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

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

    【讨论】:

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