在以下代码中,正确创建了返回值。我有一些疑问,因为对构造函数的两个参数都相关。第二个参数使用move是否会破坏第一个参数。或者,如果始终在第二个参数之前创建第一个参数:

class A
{
    private:
        struct B
        {
            int a;
            string b;
            int c;
        };

        struct C
        {
            double d;
            float f;
        };

        struct Key
        {
            int a;
            string b;
            double d;
        };

        struct Data
        {
            B x;
            C y;
        };

    public:
        Data data;

        using ReturnType = pair<Key, Data>;
        ReturnType operator()(Source input)
        {
            // use input to fill Data

            return {{data.x.a, data.x.b, data.y.d}, move(this->data)};
        }
};
注意:源可以是数据库游标,标准输入流,也可以是包含相关数据的文件指针。
c++标准是否定义了创建对的顺序。在这方面,c++ 11和c++ 17之间是否有任何区别。

最佳答案

this evaluation order reference:

它的意思是在表达中

{{data.x.a, data.x.b, data.y.d}, move(this->data)}
{data.x.a, data.x.b, data.y.d}部分将在move(this->data)之前排序(即先评估)。

关于c++ - 返回对/结构/元组时参数的顺序在下面的代码中重要吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63879483/

10-11 21:44
查看更多