-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