phoenix::lambda 函数的执行顺序是什么?
What's the execution sequence of phoenix::lambda function?
我是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"
我犯了什么错误吗?
问题是第二个ph::for_each,如果我用我自己的版本for_each替换它,它从左到右工作。我将自己的版本与官方版本进行了比较,不同之处在于它使用了detail::begin和detail:。但真正的问题是什么,我会继续深入调查。
它认为这可以在未定义的顺序下解释,在该顺序中计算一般函数参数。phoenix
Lambda语法可能简化为某种形式的函数调用。
标准没有提到这必须是哪个顺序,所以编译器实现者可以随心所欲。不能依赖函数参数的求值顺序。
相关文章:
- 计算 I+V[i++] 的顺序是什么?
- C++:使用方法调用析构函数的顺序是什么?
- 函数模板实例化、替换和重载解析的顺序是什么?
- 在 OpenGL 中计算矩阵时,转换的正确顺序是什么?
- 正确的包含顺序是什么
- 抛出多个异常时,catch 块执行的顺序是什么,为什么?
- 编译器在遇到提取或插入运算符时处理信息(字符串、操纵器等)的顺序是什么?
- 在C++中为临时库调用析构函数的顺序是什么
- 操作员优先c |进行计算的确切顺序是什么
- 在虚拟继承中构造函数调用的顺序是什么
- 函数参数的销毁顺序是什么
- 函数参数的销毁顺序是什么
- 通过构造函数初始化集初始化的变量的销毁顺序是什么
- 基类的销毁顺序是什么
- openGL:使用glm进行转换的顺序是什么
- 在C++中,析构函数的调用顺序和成员变量的销毁顺序是什么
- 类成员中的初始化顺序是什么
- 类中成员的最佳顺序是什么
- JUCE原子设施的记忆顺序是什么?
- if括号if(..)中语句的求值顺序是什么