【问题标题】:Why didn't Visual Studio warm me about a logical comparison error? [closed]为什么 Visual Studio 没有告诉我逻辑比较错误? [关闭]
【发布时间】:2018-08-12 22:10:34
【问题描述】:

当我在 Visual Studio 中对我的部分代码进行逻辑比较以使用“==”而不是“=”时,我很愚蠢并且忘记了。我的程序编译并运行良好,这让我很感兴趣。 Visual Studio 似乎捕捉到了很多错误,比如语法,但我现在想知道为什么它在编译时甚至在编译之前都没有捕捉到我的错误。我已经看到其他 IDE 在编译之前和编译期间捕获了这些逻辑错误。

这是编译器问题吗?还是特定于 IDE 的问题?

我只是好奇。

【问题讨论】:

  • 除非你粘贴代码,否则没人能帮忙。
  • 我有 x = y 而不是 x == y。这有帮助吗?如果您愿意阅读,我在帖子中进行了解释。
  • 这取决于上下文。在 if () 中它确实会发出警告。
  • @user10150308 - 在您刚刚加入的 Stackoverflow 上,我们一直在争论如何欢迎不知道如何发布正确问题的新人,即使有是网站上的一百万个示例。现在,在这里,你用你的评论确切地展示了为什么这是一种浪费的片面努力。 “如果你甚至懒得看书的话。”呵呵。
  • @davidbak 现在,在这里,您展示了为什么大多数人讨厌 stackoverflow。因为像您这样的精英无法从一天中抽出 1 分钟来回答您之前可能已经回答过的问题。很抱歉占用您生命中如此宝贵的时间,让您发布一个您本可以忽略的问题。一定是一段有趣的时光。谢谢。

标签: c++ visual-studio


【解决方案1】:

C++ 标准允许条件赋值,但如果您认为它具有误导性,则启用警告。这是 Visual Studio 警告C4706。启用它的最简单方法是将编译器警告级别设置为 4。

【讨论】:

    【解决方案2】:

    在 C++ 中,赋值和比较都只是表达式。没有特定的“逻辑条件表达式”或“赋值表达式”。都是表达而已。

    这就是您可以在条件中使用 任何 种表达式的原因,而不仅仅是“布尔”或“条件”表达式。下面是几个在条件下有效的表达式示例:10someFunctionReturningADoubleValue()someFunctionReturningAnObjectWithIntegerConversionOperator()"foo bar"'h'

    在 C++ 中,所有导致非零值的表达式都被认为是“真”,只有值“零”(整数 0,浮点 0.0(完全正确!),false)是“假” ”。

    赋值表达式的结果就是被赋值的值。所以a = 0 的结果是0(如果a 是例如int)这是假的,s = "hello world""hello world"(如果schar const*)这是真的。

    这就是您可能会看到一些代码的比较操作数相反的原因,例如0 == a 而不是 a == 0。这将有助于捕获您现在遇到的此类逻辑错误,因为0 = a 不正确并且会导致编译器错误,而a = 0 可能不会。

    【讨论】:

    • 如果schar const *,那么赋值s = "hello world" 不会给出"hello world" 的值。结果值是字符串文字中第一个字符的地址(即具有值'h'char 的地址)。该地址不为零,因此其值测试为真。
    猜你喜欢
    • 2010-09-30
    • 2022-06-16
    • 2010-12-12
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多