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

std::是否保证短路?

  •  2
  • ridiculous_fish  · 技术社区  · 3 年前

    我想比较以nul结尾的字符串和字符串文字。我希望使用 std::equal 我很好奇这段代码是否根据C++标准定义良好:

    #include <algorithm>
    
    bool is_foo(const char *str) {
        const char *lit = "foo";
        return std::equal(lit, lit + 4, str);
    }
    

    如果 标准::等于 str 具有长度(<);3.如果没有这样的保证,我认为这可能会在年底后取消引用 str公司

    如果C++规范对此有什么说明呢?谢谢你的帮助!

    1 回复  |  直到 3 年前
        1
  •  7
  •   Sam Varshavchik    3 年前

    我对C++标准的阅读表明,这是基于以下备注的学究式的未定义行为:

    备注:如果参数列表中未给出last2,则表示first2+

    这是指 std::equal

    E be:pred(*i,*(first2+(i-first1)),用于无参数的重载 proj1;

    ...

    返回false。

    我在这里看不到任何保证短路评估的东西。复杂性似乎并不意味着保证短路评估:

    [ ... ]

    “最多”部分无论如何都不合格。严格来说,这允许但不要求进行短路评估。