我发现如果我使用lambda使用mutable关键字捕获对全局变量的引用,然后修改lambda函数中的值,则结果在编译器之间是不同的。
#include <stdio.h>
#include <functional>
int n = 100;
std::function<int()> f()
{
int &m = n;
return [m] () mutable -> int {
m += 123;
return m;
};
}
int main()
{
int x = n;
int y = f()();
int z = n;
printf("%d %d %d\n", x, y, z);
return 0;
}
VS 2015和GCC的结果(g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.12)5.4.0 20160609):
100 223 100
clang ++(clang版本3.8.0-2ubuntu4(标签/ RELEASE_380 / final))的结果:
100 223 223
为什么会这样?C ++标准允许吗?