Вопросы по теме 'static-cast'

С++, статически определять базовые классы с разными адресами?
Если у меня есть производный класс с несколькими базами, каждый указатель this для каждой базы будет отличаться от указателя this производного объекта, за исключением одного. Учитывая два типа в иерархии наследования, я хотел бы определить во время...
1129 просмотров

В чем разница между static_cast ‹› и кастингом в стиле C?
Есть ли причина предпочесть static_cast<> литье в стиле C? Они эквивалентны? Есть ли разница в скорости?
106772 просмотров
schedule 18.05.2022

Какая формулировка в стандарте C ++ допускает static_cast ‹non-void-type *› (malloc (N)); работать?
Насколько я понимаю формулировку в 5.2.9 Статическое приведение, разрешен результат преобразования void* в указатель на объект только тогда, когда void* изначально был результатом обратного преобразования. В стандарте есть множество ссылок на...
1522 просмотров

C++ не может преобразовать базу A в производный тип B через виртуальную базу A.
У меня есть три класса: class A {}; class B : virtual public A {}; class C : virtual public A {}; class D: public B, public C {}; При попытке статического приведения от A * к B * я получаю следующую ошибку: cannot convert from base A to...
31522 просмотров

Ошибка преобразования типов в C++
У меня есть программа, в которой мне нужно использовать Format(); функция для объединения строкового литерала и int в переменную CString. Я пробовал несколько разных способов сделать это, код для них здесь: // declare variables used CString...
3168 просмотров

Как реализовать проверку во время компиляции, что понижение допустимо в CRTP?
У меня есть старый добрый CRPT (прошу не отвлекаться на ограничения доступа - вопрос не в них): template<class Derived> class Base { void MethodToOverride() { // generic stuff here } void ProblematicMethod()...
1496 просмотров
schedule 02.06.2022

Могу я привести пример из реальной жизни, где приведение через void * работает, а reinterpret_cast - нет?
Существует ряд вопросов относительно перекрестного преобразования (приведение от T1* к несвязанному T2* ), например this и это . Обычно ответ звучит так: reinterpret_cast определяется реализацией, и преобразование в void* , за которым...
545 просмотров
schedule 10.05.2023

static_cast и временное создание (окончательная редакция)
Предпосылки: Чтобы понять этот вопрос, сначала прочитайте следующий вопрос и ответ на него: Привести auto_ptr‹Base› к auto_ptr‹Derived› В Приведение auto_ptr‹Base› к auto_ptr‹Derived› Стив ответил, что "Ваш static_cast скопирует auto_ptr во...
1282 просмотров

Почему здесь важно использовать static_cast вместо reinterpret_cast?
В ответ на сообщение в блоге Рэймонда Чена , Спрашивающий указал Рэймонд, я считаю, что пример C++ неверен, поскольку положение подобъекта базового класса в производном классе не указано в соответствии со стандартом ISO C++ 2003 (10-3, стр....
2540 просмотров

приведение к void* для передачи объектов в pthread в c++
Я немного не понимаю, как передать объект функции pthread_create. Я нашел много разрозненной информации о приведении к типу void*, передаче аргументов в pthread_create и т. д., но ничего, что связывало бы все это воедино. Я просто хочу убедиться,...
3949 просмотров
schedule 19.06.2022

Можно ли избежать накладных расходов vtable с помощью static_cast?
Вот моя проблема. У меня есть базовый класс и производный класс, который переопределяет некоторые методы из базового класса. Для простоты рассмотрим следующий пример: struct base { virtual void fn() {/*base definition here*/} }; struct...
1702 просмотров
schedule 03.06.2023

использование dynamic_cast для идентификации типа среды выполнения
при чтении Essential c++ главы 5.10 Идентификация типа во время выполнения я столкнулся с проблемой. Позвольте мне сначала представить небольшую предысторию. Есть базовый класс с именем num_sequence и класс Fibonacci , производный от...
584 просмотров
schedule 11.08.2022

Правильный способ приведения типов указателей
Учитывая следующий код (и тот факт, что VirtualAlloc() возвращает void* ): BYTE* pbNext = reinterpret_cast<BYTE*>( VirtualAlloc(NULL, cbAlloc, MEM_COMMIT, PAGE_READWRITE)); почему выбрано reinterpret_cast вместо...
68772 просмотров

есть ли разница между статическим приведением к ссылке rvalue и std::move
Описание статического приведения говорит Если new_type является ссылочным типом rvalue, static_cast преобразует значение выражения в xvalue. Этот тип static_cast используется для реализации семантики перемещения в std::move (начиная с C++11)....
6497 просмотров
schedule 25.05.2022

Существуют ли риски производительности при использовании static_cast для работы с вектором смешанных (базовых и производных) объектов? (иначе это глупая идея?)
Учитывая базовый класс gameObject и производный класс animatedGameObject , я подумал, что было бы неплохо хранить все их экземпляры в классе std::vector . Если вектор GameObjects объявлен базовым типом gameObject* , экземпляры производных...
529 просмотров
schedule 13.09.2022

Как можно использовать static_cast с виртуальным наследованием?
Таким образом, с помощью static_cast с виртуальным наследованием невозможно выполнить понижающее преобразование, но как можно выполнить следующее восходящее преобразование: class Base {...}; class Derived : public virtual Base {...}; ......
2668 просмотров
schedule 08.11.2022

static_cast и reinterpret_cast для std::aligned_storage
может кто-нибудь объяснить фрагмент кода о приведении в http://en.cppreference.com/w/cpp/types/aligned_storage пожалуйста? можно следующий код return *static_cast<const T*>(static_cast<const void*>(&data[pos])); заменить...
1432 просмотров

Какой идиоматический способ документировать static_cast?
Я понимаю, что (MyType)foo , MyType(foo) и static_cast<MyType>(foo) в чем-то похожи в том, что первые два становятся последними (РЕДАКТИРОВАТЬ: я был исправлен. Предыдущее предложение неверно.) Мой вопрос: какую идиоматическую версию...
295 просмотров
schedule 13.07.2022

Статическое приведение — невозможно приведение через виртуальное наследование
Я читал о статических и динамических приведениях, а также о различиях между ними. В нем говорится, что static_cast не может выполнять приведение через виртуальное наследование, в отличие от динамического приведения. Я был бы признателен,...
368 просмотров
schedule 30.05.2022

qbytearray.at() в беззнаковое целое
Хорошо, у меня есть вопрос из двух частей о преобразовании элемента в QByteArray (должен быть char, верно?) в целое число без знака. Вот мой код: QByteArray data_read_buffer; unsigned int data_recieved_size = 0; /* the code below is an...
1902 просмотров