Здравствуйте, Marty, Вы писали:
M>С сырыми массивами хотя бы все подлянки уже изучены.
И сырой массив бы повёл себя точно так же.
И с чего ты взял что std::array хранит какую-то инфу, кроме заранее известных N элементов? Наверное тебе тогда StaticVector нужен?
Здравствуйте, T4r4sB, Вы писали:
M>>С сырыми массивами хотя бы все подлянки уже изучены.
TB>И сырой массив бы повёл себя точно так же. TB>И с чего ты взял что std::array хранит какую-то инфу, кроме заранее известных N элементов? Наверное тебе тогда StaticVector нужен?
Я полагал, что когда я размер явно задаю — это максмальный размер. И мне выдадут ошибку, если при инициализации я превышу указанный размер. А при недостаче инициализаторов это зафиксируется, и я смогу докинуть при нужде недостающее. Ну или тоже просто ошибка будет.
С сишечными массивами проще — у каждого есть свой макрос SIZEOF_ARRAY(), а у некоторых есть и плюсовая перегрузка, чтобы не облажаться на указателе
Здравствуйте, Marty, Вы писали:
M>и поиметь при итерации по элементам нулевой последний 15ый элемент. Но блджад, я задал явно только 14, какого хэ мне подсовывают 15ый?
M>И никто мне по рукам не дал, даже варнингов не написал, как будто так и должно быть.
и компиялтор не знает, ошибка это или ты хочешь использовать "частичную" инициализацию.
Можно поступить как и с обычным статичным массивом,
инициализировать, а потом проверить размер:
можно реализовать свой велосипед по мотивам https://en.cppreference.com/w/cpp/experimental/make_array
подобная проблема и с vector для некопируемых элементов. Надо сначала вызвать reserve(N) а потом мучительно проверять сколько элементов добавил.
Здравствуйте, Nuzhny, Вы писали:
N>Неправильно понимаешь, что такое std::array? Это же просто обёртка над сишным массивом и вести себя должен соответственно.
У сишного можно не задавать явно размер, и тогда он будет ровно того размера, сколько элементов задано в списке инициализации
Здравствуйте, Marty, Вы писали:
M>У сишного можно не задавать явно размер, и тогда он будет ровно того размера, сколько элементов задано в списке инициализации
Можно. Но ведь с std::array размер явно задаётся, это не тот случай.
Здравствуйте, Nuzhny, Вы писали:
M>>У сишного можно не задавать явно размер, и тогда он будет ровно того размера, сколько элементов задано в списке инициализации
N>Можно. Но ведь с std::array размер явно задаётся, это не тот случай.
Здравствуйте, Marty, Вы писали:
M>У сишного можно не задавать явно размер, и тогда он будет ровно того размера, сколько элементов задано в списке инициализации
Так а что от этого меняется? Да, в С-шном массивве можно не задавать размер, а в std::array нельзя, но поведение std::array в точности соответствует встроенному массиву с явно заданным размером. Потому что std::array сам по себе является простой структурой, содержащей массив и подчинаяется правилам агрегатной инициализации, так же, как и все агрегатные типы — массивы и простые структуры.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Nuzhny, Вы писали:
N>>Неправильно понимаешь, что такое std::array? Это же просто обёртка над сишным массивом и вести себя должен соответственно.
M>У сишного можно не задавать явно размер, и тогда он будет ровно того размера, сколько элементов задано в списке инициализации
Здравствуйте, rg45, Вы писали:
R>Так а что от этого меняется? Да, в С-шном массивве можно не задавать размер, а в std::array нельзя,
Можно уже: https://wandbox.org/permlink/Z33d2R8vX2A2Y3OO
Здравствуйте, Marty, Вы писали:
M>Херня какая-то, если честно. Проще на своих велосипедах и дальше ездить, чем по этим новым граблям прыгать
Всегда проще использовать тот код, который знаешь.
Поэтому можно всегда таскать свои велосипеды везде, но могут возникнуть проблемы собственности, если велосипед из одной конторы вдруг появляется в другой.
Если ваш велосипед настолько хорош, что коллеги начинают его использовать, тогда — ok, а вот изучать чужой код, который делает тоже самое, что есть в стандартной библиотеке — зачем?
Так что стандартная библиотека рулит.
О, отлично. Только все равно не понимаю, зачем вспоминать об этой возможности в контексте обсуждения, когда проблема наблюдается как раз в другом случае — когда размер задается явно.
--
Не можешь достичь желаемого — пожелай достигнутого.