c++ - 成员函数的链式调用 - 调用顺序

标签 c++ volatile method-chaining operator-precedence

我有一个包含链式函数调用的大型应用程序,如下所示:

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/

相关文章:

php - 在 Laravel 中构建动态查询 - 如何进行多选项搜索

javascript - 数组上的链接方法显示为未定义

c++ - 具有相同元素的最大堆和最小堆

java - 如何将对象的成员字段声明为易变的?

java - Java新内存模型中的happens-before是否也适用于声明为 volatile 的对象的成员?

php - 如何通过在 PHP 中使用包含该链的字符串来链接调用函数

c++ - 通过引用传递数组

C++函数指针;没有匹配功能

c++ - 来自未选择列表初始化的数组引用的构造函数

c++ - 分配一个易变的右值