Описание тега const-cast

Anything related to the `const_cast` operation in C++, i.e. a form of compile-time conversion where the `const` or `volatile` qualifiers are cast away (removed) from a variable.
5 ответов

Является ли const_cast приемлемым при определении массива?

У меня есть статический член класса массива const (константные указатели на SDL_Surfaces, но это не имеет значения), и я должен пройти через него, чтобы заполнить его. Кроме const_cast, когда я закончу цикл, который, как я слышал, является плохой пр…
11 окт '10 в 07:04
1 ответ

Тестирование места хранения статического константного члена

У меня есть class A { private: static const int b = 10; public: static void testReadOnly(int _b) { const_cast<int &>(A::b) = _b; } }; и я хочу проверить, является ли переменная-член b инициализируется во время компиляции и поэтому сохраняе…
10 ноя '13 в 13:49
2 ответа

Что произошло при увеличении константного указателя верхнего уровня?

Когда я пытался выяснить const и const_cast верхнего уровня, я написал некоторый код следующим образом. int main() { // m is a top-level const const int m = 10; // this is an undefined behavior according to *Primer c++* // but I still compile and ru…
05 мар '18 в 07:23
3 ответа

Приведение const для передачи его функции, которая принимает ссылку, что происходит?

Может кто-нибудь сказать мне, что здесь происходит при переходе к g в основном, это static_cast? int & g (int&x){x++ ; return x ; } int main() { const int a=5 ; cout<<g((int&)a)<<endl; } Я уверен, что копия не сделана, так ка…
30 янв '11 в 21:31
5 ответов

Безопасно ли здесь делать конст-бросок?

Я написал свою собственную реализацию универсального дерева, и когда я пишу для нее итераторы, у меня возникают проблемы с правильностью констант. У меня сейчас проблема в следующем: Это заголовочный файл для итератора DFS, который я написал: templa…
23 мар '12 в 15:10
1 ответ

Пишем ученику через const &

В этом примере, приведение в стиле c к int& с последующим присвоением вида взломать интерфейс класса A неопределенное поведение? class A { public: A() : x(0) { } ~A() { std::cout << x << std::endl; } const int& getX() { return x;…
28 апр '17 в 16:19
2 ответа

Преобразование между 2 типами с различными квалификаторами const

Это короткий пример кода, который я хочу использовать: template <class T> class B { public : bool func1(const T& t) { // do something } }; class A { B<int*> b; public: void func2(const int* a) { b.func1(a); } }; Я получаю эту ошибку:…
13 окт '15 в 19:31
2 ответа

Почему const_cast прочь volatile работает только для указателя

// OK! volatile CString* a0; CString* a1 = const_cast<CString *>(a0); // error C2440: 'const_cast' : cannot convert from 'volatile CString' to 'CString' volatile CString b0; CString b1 = const_cast<CString>(b0); Мне было интересно, почем…
18 ноя '11 в 11:13
3 ответа

Почему (int&)0 плохо сформировано?

Согласно [expr.cast]/4, бросок в стиле C пытается выполнить следующие приведенные ниже броски: const_cast static_cast static_cast с последующим const_cast reinterpret_cast reinterpret_cast с последующим const_cast Следующий состав хорошо сформирован…
0 ответов

Почему const_cast создает два значения для одной переменной

Я читал о const_cast, поскольку он должен удалить постоянство переменной, const int c1 = 100; int *c2 = const_cast <int *>(&c1); // removing the constantness *c2 = 200; // hence now i can edit it cout << *c2 << endl; // reflect…
23 янв '17 в 07:27
1 ответ

Преобразование const_cast в ссылку lvalue не удаляет константу

Я хотел бы понять разницу ниже двух случаев. const uint32_t v0 = 0; const uint32_t v1 = 1; const_cast<uint32_t&>(v0) = v1; std::cout << v0 << std::endl; Этот результат: 0 Тем не мение, struct S { const uint32_t v0; S() : v0( 0U…
25 май '14 в 15:02
2 ответа

const_cast, кажется, игнорируется шаблонами C++?

Я написал простой класс ведения журнала, который поддерживает шаблоны с переменным числом символов в C++ с использованием Visual Studio в Windows. Я создал общий Log Шаблон функции с рядом специализаций, чтобы удовлетворить общую комбинацию возможны…
04 окт '17 в 22:53
3 ответа

Почему const_cast удаляет constness для указателя, но не для указателя на const?

Я это понимаю const_cast работает с указателями и ссылками. Я предполагаю, что вклад в const_cast должен быть указатель или ссылка. Я хочу знать, почему он не удаляет константность, если вход является указателем / ссылкой на const int? Следующий код…
31 авг '18 в 08:01
2 ответа

Приведение Const Pointer для работы с устаревшим кодом C

В продолжение моего предыдущего вопроса ( влияние на производительность массива переменной длины (C / C++)) у меня возникли некоторые проблемы с поддержанием правильности констант с помощью системного вызова C writev(). А именно, похоже, что я столк…
01 окт '13 в 17:35
3 ответа

Использование const_cast в C++ вместо приведений в стиле C

Почему следующее? const int i0 = 5; //int i1 = const_cast<int>(i0); // compilation error int i2 = (int)i0; // okay int i3 = 5; //const int i4 = const_cast<const int>(i3); // compilation error const int i5 = (const int)i3; // okay
16 дек '08 в 06:30
5 ответов

Разрешено ли использование const_cast для доступа только для чтения к объекту const?

В C++ у меня есть функция, которая требует только доступ только для чтения к массиву, но ошибочно объявлена ​​как получение неконстантного указателя: size_t countZeroes( int* array, size_t count ) { size_t result = 0; for( size_t i = 0; i < count…
09 окт '09 в 06:55
2 ответа

Автоматический вывод типа с const_cast не работает

В моей работе использование const_cast при некоторых обстоятельствах неизбежно. Теперь я должен const_cast некоторые довольно сложные типы, и на самом деле я не хочу писать все эти беспорядок типа в const_cast<Clutter> выражения, особенно если…
13 дек '18 в 10:08
3 ответа

const_cast и const указатель на const vaiable

Как это возможно, что значение *p и значение DIM отличаются, но имеют один и тот же адрес в памяти? const int DIM=9; const int *p = &DIM; * (int *) p = 18; //like const_cast cout<< &DIM <<" "<< p << '\n'; cout <&lt…
22 фев '16 в 00:49
3 ответа

C++ не может удалить константу объекта в рекурсивном

У меня есть функция ниже class p{ public : string const& PrintData() const { cout << "const" << str; const_cast<ConstFunctions *>(this); PrintData(); return str; } string const& PrintData() { cout << "non-const" <&…
28 апр '16 в 11:37
3 ответа

Const_cast позволяет изменить constness на путь, который ведет к const?

Учитывая этот код (из моего последнего поста здесь): const int j = 5; // constant object const int *p = &j; // `p` is a const access path to `j` int *q = const_cast<int *>(p); // `q` is a non-const access path to `j` *q = 10; cout <<…
14 июл '12 в 14:47