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

Когда использовать reinterpret_cast?
Меня немного смущает применимость reinterpret_cast против static_cast . Из того, что я прочитал, общие правила - использовать статическое приведение, когда типы можно интерпретировать во время компиляции, отсюда и слово static . Это приведение,...
374654 просмотров
schedule 19.12.2022

C++: безопасный способ привести целое число к указателю
Мне нужно преобразовать целочисленный тип, который содержит адрес, в фактический тип указателя. Я мог бы использовать reinterpret_cast следующим образом: MyClass *mc1 = reinterpret_cast<MyClass*>(the_integer); Однако это не выполняет...
1459 просмотров

трансляция через void * вместо использования reinterpret_cast
Я читаю книгу и обнаружил, что reinterpret_cast не следует использовать напрямую, а лучше использовать преобразование в void * в сочетании с static_cast : T1 * p1=... void *pv=p1; T2 * p2= static_cast<T2*>(pv); Вместо: T1 *...
6658 просмотров

Проблема приведения комплекса STL‹double› к fftw_complex
В руководстве FFTW говорится , что его fftw_complex тип бит-совместим с std::complex<double> класс в STL. Но это не работает для меня: #include <complex> #include <fftw3.h> int main() { std::complex<double>...
10165 просмотров

С++ переосмыслить приведение?
Я хотел бы привести один объект класса PointsList к другому объекту Points3DList (и наоборот), где: template <class T> class PointsList { protected: std::vector <Point <T> *> points; //Only illustration, not...
1132 просмотров
schedule 17.04.2023

Нарушает ли простое приведение для выполнения необработанной копии переменной строгое сглаживание?
Я читал о строгом использовании псевдонимов . в последнее время очень много. Стандарты C/C++ говорят, что следующий код недействителен (неопределенное поведение, чтобы быть правильным), поскольку компилятор может иметь значение a где-то в кэше...
412 просмотров

Безопасный способ переинтерпретировать необработанную структуру с определенным смещением и типом?
return *reinterpret_cast<UInt32*>((reinterpret_cast<char*>(this) + 2)); Структура упакована прагмой 1 и содержит кучу полей uint, char, short... Поскольку это UInt32, следует ли сначала переинтерпретировать_приведение к...
2024 просмотров
schedule 29.06.2022

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

Выбор случайного числа для идентификатора объекта?
Я реализую базовый класс подсчета ссылок и хотел бы установить уникальный номер для каждого создаваемого объекта, который наследует этот интерфейс. вот фрагмент кода из этого класса: ЗАГОЛОВОК: class Object { const long long...
380 просмотров
schedule 17.03.2023

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

Почему приведение в стиле C работает, а reinterpret_cast — нет?
Итак, у меня есть массив из двух символов unsigned char v[2]; Я хочу показать значение v[0] как число от 0 до 255, но cout << v[0] << endl; //prints some garbage cout << (void*)v[0] << endl; //prints the right...
1188 просмотров
schedule 25.03.2023

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

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 просмотров

Передать число с плавающей запятой в качестве параметра шаблона (bis)
Как до Я пытаюсь «эмулировать» параметры шаблона float на основе его записи IEEE754 благодаря reinterpret_cast. Я использую компилятор MSVC 2005 (он не поддерживает С++ 11). Вот код: #include <iostream> #ifdef _MSC_VER typedef...
112 просмотров

Использование reinterpret_cast для возврата long long из char*
У меня есть следующий код: char* p = "12345"; long long x = *reinterpret_cast<long long*>(p); и я продолжаю получать 228509037105 для x - Я ожидал 12345. Что я делаю не так? ОБНОВИТЬ: Я задал вопрос неправильно из-за моего...
2145 просмотров
schedule 29.03.2023

Рассматривайте массив символов (или несколько байтов) как объект структуры. Как это работает?
Я видел технику, рассматривающую массив символов как структуру/класс и работающую с ним напрямую. См. следующий псевдопример: Struct Container { char e1; short e2; int e3; Class4 e4; Class5 e5; // more... } char *msg =...
184 просмотров

Использование указателя для преобразования char* в unsigned char*
Я пишу код, который использует функцию fstream read(), и эта функция ожидает char* в качестве буфера. Позже я хочу работать с байтами в этом буфере как беззнаковые символы, поэтому мне либо придется: 1. объявить буфер как char*, а затем выполнить...
4820 просмотров
schedule 25.11.2023

Почему reinterpret_cast не принудительно выполняет copy_n для приведения типов одинакового размера?
Согласно cppreference.com , reinterpret_cast : Преобразует типы, переинтерпретируя базовый битовый шаблон. Но подождите, это ложь, потому что это работает только в этих случаях: When a pointer or reference to object of type T1...
303 просмотров
schedule 28.08.2022

Можно ли избежать проблем с псевдонимами с помощью константных переменных
Моя компания использует сервер обмена сообщениями, который получает сообщение в виде const char* , а затем преобразует его в тип сообщения. Я забеспокоился об этом после того, как задал этот вопрос . Я не знаю ни о каком плохом поведении на...
1203 просмотров

Безопасно ли приводить указатель к целому числу, увеличивать это целое число и возвращать обратно?
Предположим, у меня есть действительный указатель p0 : T a[10]; T* p0 = &a[0]; Я знаю, что я могу безопасно выполнить круговой переход следующим образом: reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(p0)) == p0;...
342 просмотров