170 похожих чатов

Есть ли возможность сделать так, чтобы поле-вектор в классе один

раз инициализировалось в конструкторе и более в него нельзя было бы добавить элементы? При этом с самим элементами в этом векторе должна быть возможность работать как не с const объектами.

23 ответов

21 просмотр

А удалить? Если тоже нельзя, то можешь и простой С массив и std::array и еще подобного в бустах и гитхабах.

В фабрику оберни

Отдавать наружу только итераторы не поможет?

Ну и еще вариант тупо и просто написать свой классик для обертки malloc/free, new/delete или вообще какой умный указатель заюзать.

Viktor Chyzhdzenka
Ну и еще вариант тупо и просто написать свой класс...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Viktor Chyzhdzenka
Ну и еще вариант тупо и просто написать свой класс...

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

const

d7d1cd- Автор вопроса
Ilya Zviagin
const

Тогда и элементы будут const, а мне так не надо.

d7d1cd
Тогда и элементы будут const, а мне так не надо.

class MyClass { public: MyClass() : vc({1, 2, 3, 4}) {} int& getElem(size_t idx) { return const_cast<int&>(vc[idx]); } private: const std::vector<int> vc; };

Андрей Таусинов
class MyClass { public: MyClass() : vc({1, 2, 3, ...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

d7d1cd- Автор вопроса
Ilya Zviagin
Не будут

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

d7d1cd- Автор вопроса
Андрей Таусинов
class MyClass { public: MyClass() : vc({1, 2, 3, ...

Сделать из того, что изначально const - не const - это UB.

d7d1cd
Сделать из того, что изначально const - не const -...

ну кажется что элементы вектора - не const

d7d1cd- Автор вопроса
Mikail Bagishov
ну кажется что элементы вектора - не const

А не будет ли там какой-то оптимизации?

d7d1cd
А не будет ли там какой-то оптимизации?

ну оптимизации тут не при делах, вопрос что в стандарте написано. Я не помню, чтобы там было что-то типа "если вектор помечен как const, то его внутренний массив тоже const" (и вообще кажется, что такая формулировка невозможна)

Mikail Bagishov
ну кажется что элементы вектора - не const

Если коллекция немутабельная, то и элементы её тоже. Это не в плюсах, это вообще так

netricks
Если коллекция немутабельная, то и элементы её тож...

ну значит вопрос в том, насколько const vector иммутабельный. Андрей утверждает (и на мой взгляд убедительно), что его иммутабельность это (в некоторых отношениях) конвенция.

Mikail Bagishov
ну значит вопрос в том, насколько const vector имм...

Обойти завсегда можно. Но если вы пометили вектор как const и собираетесь что-то в нём менять, или что ещё хуже, ожидаете, что в нём что-то поменяется во время работы с ним, то вы, веооятно, что-то делаете не так. Наверно, не надо передавать его через константную ссылку, например

netricks
Обойти завсегда можно. Но если вы пометили вектор ...

Ну насколько я понял, исходный кейс - это положить в приватное поле класса вектор так, чтобы нельзя было его ресайзить, но можно было менять его элементы.

Mikail Bagishov
ну оптимизации тут не при делах, вопрос что в стан...

Внутрений массив не конст, но operator[] возвращает константную ссылку

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
6
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
Карта сайта