【发布时间】:2012-02-29 13:40:09
【问题描述】:
我有一个包含链接函数调用的大型应用程序,如下所示:
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 的配置参数。事实上,当我在调试和发布模式(MS Visual Studio 2005)下运行我的应用程序时,对Configuration::get 的调用顺序是相反的。
在我们添加了对从 Configuration::get 返回随机值的支持(用于测试)之前,一切都很好。当我们这样做时,Debug 和 Release 模式下的行为变得不同了。
所以我的问题是:
我可以解决这个问题并仍然使用链式函数调用吗? (我们有很多这样写的代码;全部改掉会很累)
我可以使用volatile 等技巧吗?
【问题讨论】:
-
我有点困惑,当您返回 随机值 时结果的不同可能会成为问题。结果肯定应该总是不同吗?
-
@LightnessRacesinOrbit 我使用带有恒定种子的伪随机生成器
标签: c++ volatile method-chaining operator-precedence