[英]copying C-style arrays and structure
C++ 不允許使用=
復制 C 樣式 arrays。 但是允許使用=
復制結構,如在此鏈接中 -> 在 C 中復制數組與在 C 中復制結構。它還沒有任何可靠的答案。 但考慮以下代碼
#include <iostream>
using namespace std;
struct user {
int a[4];
char c;
};
int main() {
user a{{1,2,3,4}, 'a'}, b{{4,5,6,7}, 'b'};
a = b; //should have given any error or warning but nothing
return 0;
}
上面的代碼段沒有給出任何錯誤和警告,並且工作正常。 為什么? 考慮解釋這兩個問題(這個和上面鏈接的一個)。
您的 class user
獲得了隱式聲明的復制構造函數和隱式聲明的復制賦值運算符。
隱式聲明的復制賦值運算符將內容從b
復制到a
。
標准中似乎適用的兩個段落:
如果該成員是一個數組,則每個元素都直接使用 x 的相應子對象進行初始化;
如果子對象是數組,則以適合元素類型的方式分配每個元素;
是的,代碼應該可以正常工作。 arrays不能直接整體賦值; 但它們可以通過隱式定義的復制分配運算符分配為數據成員,對於非聯合 class 類型,它執行非靜態數據成員的成員方式復制分配,包括數組成員及其元素。
數組類型的對象不能作為一個整體進行修改:即使它們是左值(例如可以取數組的地址),它們也不能出現在賦值運算符的左側:
int a[3] = {1, 2, 3}, b[3] = {4, 5, 6}; int (*p)[3] = &a; // okay: address of a can be taken a = b; // error: a is an array struct { int c[3]; } s1, s2 = {3, 4, 5}; s1 = s2; // okay: implicity-defined copy assignment operator // can assign data members of array type
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.