-3
最小工作示例:阵列在这段代码中复制了多少次?
#include <string.h>
struct pair_t;
class A {
public:
A(const char *s) { strcpy(buf, s); }
struct pair_t dup();
private:
char buf[32];
};
struct pair_t {
A left;
A right;
};
struct pair_t A::dup() {
return (struct pair_t){ A(buf), A(buf) };
}
int main() {
A a1("alpha");
pair_t pair = a1.dup();
}
在线路pair_t pair = a1.dup();
以及的A::dup()
呼叫内,有多少次是buf
数组复制? 2? 4?更多?
显然我的问题不像我想的那么清楚。让我详细说明一下。我还在寻找更多的“标准说明它应该做什么”而不是“我现在安装的编译器的特定版本做了什么”,所以我宁愿不根据调试语句来计数。
在A::dup
中,我创建了一个struct pair_t
并用两个对象填充它。我称这两个对象的构造函数。因此,这是2.
推测这个pair_t
是本地函数,但它从外部返回此函数。这是否会创建pair_t
的副本以返回到main
函数?如果是这样,它是否也复制left
和right
里面?如果是这样,它是通过构造函数进行复制还是进行某种幕后直接内存复制?这些加起来有多少?
JFME,什么是MWE? –
尝试向构造函数添加一些跟踪,然后创建一个复制和移动构造函数,以便您可以跟踪这些跟踪,*和*复制和移动赋值运算符。那么这是一个简单的计数问题。 –
@VadimKey MWE是最小工作示例。 Stack Overflow上通常使用的术语 – Ana