我有一个包含链式函数调用的大型应用程序,如下所示:
subsystem.
do_stuff(cfg().get("x")).
do_stuff(cfg().get("y"));
这里subsystem
是类类型的对象:
struct Sybsystem
{
Sybsystem& do_stuff(int parameter)
{
... // much code
return *this; // this line makes it possible to chain calls
}
};
此外,cfg()
是一个返回配置对象的“全局函数”:
struct Configuration
{
int get(const char* param_name);
}
Configuration& cfg();
带有链式函数调用的代码首先执行 x
的操作,然后用 y
;但是,C++ 没有定义 x
的配置参数何时和y
从配置对象中提取。事实上,当我在调试和 Release模式(MS Visual Studio 2005)下运行我的应用程序时,调用 Configuration::get
的顺序是相反的。
一切都很好,直到我们添加了对从 Configuration::get
返回随机值的支持(供测试用)。当我们这样做时,调试和 Release模式下的行为变得不同。
所以我的问题是:
我可以解决这个问题并仍然使用链式函数调用吗? (我们有很多这样编写的代码;全部更改会很烦人)
例如,我可以使用 volatile
的技巧吗? ?
最佳答案
不,你不能。函数参数的计算顺序未指定,您对此无能为力。
您必须打破链条来创建自己的序列点,其中该顺序很重要。
关于c++ - 成员函数的链式调用 - 调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500183/