簡體   English   中英

復制 C 風格 arrays 和結構

[英]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

標准中似乎適用的兩個段落:

class.copy.ctor

如果該成員是一個數組,則每個元素都直接使用 x 的相應子對象進行初始化;

class.copy.assign

如果子對象是數組,則以適合元素類型的方式分配每個元素;

是的,代碼應該可以正常工作。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM