代码之家  ›  专栏  ›  技术社区  ›  Pac0

C:在C++中使用和&操作符时是否存在“懒惰评估”?

  •  13
  • Pac0  · 技术社区  · 14 年前

    while((next !=NULL) && (strcmp(next->name, some_string) < 0) {
        //some process
    }
    

    我是说,如果下一个是 NULL ,那么表达式的第二部分将永远不会被编译器测试?我听说C++中是这样的(但我甚至不确定)。

    有人能证实我用它不会在某些编译器上出现奇怪的错误吗?

    4 回复  |  直到 7 年前
        1
  •  16
  •   codaddict    14 年前

    是的 && 是短路的,您正在正确使用它。
    next NULL 字符串比较永远不会发生。

        2
  •  8
  •   Pablo Santa Cruz    14 年前

    是的,在C++短路中 and or 有接线员。

    Here 是一个在C-faq中回答的问题。

        3
  •  7
  •   Jackson Pope    14 年前

    C和C++都是这样的。

        4
  •  2
  •   sharptooth    14 年前

    这将适用于惰性计算(如果第一个语句计算为“false”,则第二个语句不计算),除非编译器非常不符合标准,甚至不能将其命名为C编译器。域中有数百万行代码依赖于此行为,因此您可以认为此行为只是保证。