在以下代码中,正确创建了返回值。我有一些疑问,因为对构造函数的两个参数都相关。第二个参数使用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/