繁体   English   中英

Lambda错误的GCC行为

[英]Wrong gcc behaviour with lambda

通过编译:

#include <iostream>
#include <sstream>

std::string makeList (std::string sep)
{
    auto makeItem = [&] (std::string item)
    {
        static char count = '0';
        return (++count, count) + sep + item + '\n';
    };

    return makeItem ("first") + makeItem ("second") + makeItem ("third");
}

int main() 
{
    std::cout << makeList (". ");
}

使用gcc(5.4.0,c ++ 11标志)的输出是这样的:

3. first
2. second
1. third

而clang(3.8,c ++ 11 flag)得到的正确输出是:

1. first
2. second
3. third

这种行为是否有特定原因?

根据cppreference

几乎所有C ++运算符的操作数求值顺序(包括函数调用表达式中的函数自变量的求值顺序以及任何表达式中子表达式的求值顺序)均未指定。 编译器可以按任何顺序求值操作数,并且当再次求同一个表达式时可以选择其他顺序。

这里没有对与错,GCC评估从右到左,从左到右的叮当声

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM