Я думал, что массив нельзя копировать

У меня создалось впечатление, что массив нельзя копировать (или присваивать).

int x[5] = {1,2,3,4,5};
int y[5] = {6,7,8,9,0};

x = y; // Fails to compile

Но когда я помещаю массив внутрь класса, конструктор копирования и оператор присваивания работают (я бы сказал, как и ожидалось, но это не то, что я ожидал).

#include <iostream>

struct X
{
    virtual ~X(){} // Just in case it was something to do with POD 
                   // make sure its not a POD
    int x[5];
};

int main()
{
    X   a;

    a.x[0]  = 0;
    a.x[1]  = 1;
    a.x[2]  = 2;
    a.x[3]  = 3;
    a.x[4]  = 4;

    // Make a copy of a and test it
    X   b(a);          
    std::cout << a.x[0] << " : " << b.x[0] << "\n";

    b.x[0]  = 10;
    b.x[1]  = 11;
    b.x[2]  = 12;
    b.x[3]  = 13;
    b.x[4]  = 14;

    // Now that we have modified 'b' make sure it is unique.
    std::cout << a.x[0] << " : " << b.x[0] << "\n";

    // Use assignment and see if it worked.
    b   = a;
    std::cout << a.x[0] << " : " << b.x[0] << "\n";
}

Скомпилировать и запустить

> g++ t.cpp
> ./a.out
0 : 0
0 : 10
0 : 0

Что здесь происходит?

13
задан Martin York 6 February 2012 в 21:05
поделиться