我是boost phoenix的新手,我写了一小段代码,但它完全让我对执行顺序感到困惑,你可以检查一下代码
std::vector<int> v;
v.push_back(1);
ph::for_each(v,
ph::lambda[ph::ref(cout)<<"a",
ph::ref(cout)<<"b"
])(v);
ph::for_each(arg1,
ph::lambda[ph::ref(cout)<<"a",
ph::for_each(v,
ph::lambda[ph::ref(cout)<<"b",
ph::ref(cout)<<"c"
]),
ph::ref(cout)<<"d"
])(v);
第一个输出是“ab” 但第二个输出是“dbca”
我犯了一些错误吗?
答案 0 :(得分:0)
问题是第二个ph :: for_each,如果我用我自己的版本for_each替换它,它从左到右工作。 我将自己的版本与官方版本进行比较,区别在于使用detail :: begin和detail :: end。 但是什么是真正的问题,我会继续对它进行更多调查。
答案 1 :(得分:0)
它认为这可以在 undefined order 中解释,其中评估了一般函数参数。 phoenix
Lambda语法可能会减少某种形式的函数调用。
标准没有提到这必须是哪个顺序,因此编译器实现者可以随意做。您不能依赖函数参数评估顺序。