Почему C и C++ поддерживают почленное присвоение массивов внутри структур, но не вообще?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему C и C++ поддерживают почленное присвоение массивов внутри структур, но не вообще?

Сообщение Anonymous »

Я понимаю, что почленное присвоение массивов не поддерживается, поэтому следующее не будет работать:

Код: Выделить всё

int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"
Я просто принял это как факт, полагая, что цель языка — предоставить открытую структуру и позволить пользователю решать, как реализовать что-то, например копирование массива. .
Однако следующее действительно работает:

Код: Выделить всё

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Массив num[3] присваивается поэлементно из его экземпляра в struct1 в его экземпляр в struct2.
Почему почленное присвоение массивов поддерживается для структур, но не в целом?
изменить: Роджер Пейт< Комментарий /strong> в теме std::string в struct - Проблемы с копированием/назначением? кажется, указывает на общее направление ответа, но я не знаю достаточно, чтобы подтвердить это самому.
редактировать 2
: много отличных ответов. Я выбираю версию Лютера Блиссетта, потому что в основном меня интересовали философские или исторические обоснования такого поведения, но ссылка Джеймса МакНеллиса на соответствующую документацию по спецификациям также оказалась полезной. .

Подробнее здесь: https://stackoverflow.com/questions/343 ... ts-but-not
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»