Вопросы по теме 'const-correctness'

Const-correct Notifier в шаблоне Observer
Я хочу реализовать наблюдатель класса модели, который не меняет модель. Таким образом, он должен иметь возможность использовать const-Reference для доступа к модели. Но Регистрация Наблюдателя запрещает это. Вот как реализован шаблон наблюдателя...
974 просмотров

Почему константная корректность специфична для C ++?
Отказ от ответственности: я знаю, что есть два вопроса о полезности константной корректности, однако ни один из них не обсуждал, как константная корректность необходима в C ++ по сравнению с другими языками программирования. Кроме того, я не...
8209 просмотров
schedule 04.03.2022

Имеет ли смысл делать фундаментальный (не указатель) параметр константой?
Недавно у меня был обмен с другим разработчиком C ++ по поводу следующего использования const : void Foo(const int bar); Он считал, что использование const таким образом было хорошей практикой. Я утверждал, что он ничего не делает для...
1807 просмотров
schedule 07.02.2022

RAII: инициализация элемента данных в методе const
В RAII ресурсы не инициализируются до тех пор, пока к ним не будет осуществлен доступ. Однако многие методы доступа объявлены постоянными. Мне нужно вызвать функцию mutable (неконстантную) для инициализации элемента данных. Пример: загрузка...
792 просмотров
schedule 10.05.2022

Может ли константная корректность улучшить производительность?
Я много раз читал, что обеспечение константной корректности в вашем коде C или C ++ является не только хорошей практикой с точки зрения ремонтопригодности, но также может позволить вашему компилятору выполнять оптимизацию. Однако я также прочитал...
25275 просмотров
schedule 06.07.2023

Постоянный аргумент указателя на метод, который делегирует функцию removeAll().
Рассмотрим такой метод: void Parent::removeChild(Child *child) { children.removeAll(child); } В этом случае, поскольку child сам по себе никогда не модифицируется, его можно сделать константным указателем. Но так как children имеет...
512 просмотров
schedule 16.03.2022

могут ли функторы, вызываемые из алгоритмов, действующих на карте, принимать пару‹K, V› вместо value_type?
Я попытался написать короткую функцию для инвертирования std::map<K, V> (я знаю о boost.bimap, это для самообразования) и, к моему удивлению, обнаружил, что код, принятый GCC 4.4 с настройками -pedantic -ansi, был отклонен как const-incorrect...
199 просмотров

std :: vector объектов и const-корректность
Учтите следующее: class A { public: const int c; // must not be modified! A(int _c) : c(_c) { // Nothing here } A(const A& copy) : c(copy.c) { // Nothing here } }; int main(int...
5089 просмотров
schedule 10.04.2022

Как вызвать неконстантную функцию внутри константной функции (C++)
У меня есть устаревшая функция, которая выглядит так: int Random() const { return var_ ? 4 : 0; } и мне нужно вызвать функцию в этом унаследованном коде, чтобы теперь она выглядела так: int Random() const { return var_ ? newCall(4) :...
32660 просмотров

Как мы можем назвать это удалением; в константной функции-члене?
Я видел следующий фрагмент кода: class UPNumber { public: UPNumber(); UPNumber(int initValue); ... // pseudo-destructor (a const member function, because // even const objects may be destroyed) void destroy() const { delete this; } //...
1148 просмотров
schedule 30.06.2022

C++ позволяет избежать дублирования кода для константных и неконстантных посещений
У меня есть класс, который должен вызывать метод посетителя для каждой переменной-члена. Что-то вроде этого: class A{ int a, b, c; public: void accept(Visitor &visitor){ visitor.visit(a); visitor.visit(b);...
1523 просмотров
schedule 30.05.2024

UnitTest++ Зачем нужны перегрузки CheckEqual(), которые принимают неконстантный char*
В фреймворке UnitTest++ в модуле Checks.cpp есть 4 перегруженные версии CheckEqual. Каждая перегрузка принимает различную константу для ожидаемой или фактической. Затем все четыре просто вызывают CheckStringsEqual(), который принимает char const*...
503 просмотров

рекомендуется ли добавлять const в конце функций-членов - где это уместно?
Является ли хорошей практикой в ​​C++ добавление const в конец определения функции-члена каждый раз , когда функция не изменяет объект, т. е. каждый раз, когда функция «приемлема» для const? Я знаю, что в этом случае необходимо: class MyClass {...
7367 просмотров
schedule 27.05.2022

Почему нет концепции константной правильности для статических функций-членов класса?
Вариант использования: class A { static int s_common; public: static int getCommon () const { s_common; }; }; Обычно это приводит к ошибке: ошибка: статическая функция-член ‘static int A::getCommon()’ не может иметь cv-qualifier...
1139 просмотров
schedule 21.05.2022

Подрывает ли этот код систему типов C ++?
Я понимаю, что наличие метода const в C ++ означает, что объект доступен только для чтения с помощью этого метода, но в противном случае он все равно может измениться. Однако этот код, очевидно, изменяет объект с помощью ссылки const (т.е. с...
831 просмотров
schedule 28.10.2022

Есть ли что-то вроде std::value_wrapper параллельно std::reference_wrapper?
( ОБНОВЛЕНИЕ: этот вопрос связан с реализацией класса-оболочки, передаваемого по значению для объекта, который имеет разные значения для const Foo и Foo , на основе перемещения исключительно на твердом мнении людей здесь . До этого я раздавал...
272 просмотров

Корректность констант в C # с богатыми типами
Исходя из опыта работы с C ++ и пытаясь изучить C #, одно из самых неприятных упущений языка, с которыми я столкнулся, - это эквивалент ключевого слова const . Итак, я пытался выбрать шаблон, который можно использовать для достижения константной...
494 просмотров

Всегда ли указатель this является константой?
Пусть X будет классом с функцией-членом f() . this — это неявный аргумент для f() , он имеет тип X* const . Затем, если f() const является константной функцией-членом, тип указателя this теперь будет const X* const . В обоих...
1286 просмотров

С++ возвращает неконстантную ссылку из константного объекта
У меня есть структура, содержащая ссылку в ней template <class T> struct RefContainer { RefContainer(T& t) : _r(t) {} T& getRef() { return _r; } private: T& _r; }; Теперь другой объект, который...
176 просмотров
schedule 28.03.2022

Идиоматический способ объявления неизменяемых классов C ++
Итак, у меня есть довольно обширный функциональный код, в котором основным типом данных являются неизменяемые структуры / классы. Способ, которым я объявлял неизменяемость, «практически неизменяем», делая переменные-члены и любые методы константными....
18886 просмотров