为什么这不会是dynamic_cast
Why will this not dynamic_cast?
我正在尝试了解一些C++特性,并编写了一个小测试。然而,当我尝试编译时,我会得到以下错误(如下)。为什么会发生这种情况,正确的方法是什么?我试图将一个32位指针转换为一个8位指针,并在转换后打印出内容。
cast3.cpp:22:错误:无法将"bigptr"(类型为"uint32_t*")动态转换为类型"uint8_t*"(目标不是指向类的指针或引用)
代码:
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void castme(uint8_t small[], int size);
int main(void)
{
uint8_t *small;
uint32_t big = 0x01234567;
uint32_t *bigptr = &big;
small = dynamic_cast<uint8_t *>(bigptr); // Line 22
castme(small, sizeof(big));
return 0;
}
void castme(uint8_t small[], int size)
{
for (int i = 0; i < size; i++)
{
printf("0x%xn", small[i]);
}
}
dynamic_cast
仅适用于具有虚拟成员函数的类。要在彼此之间强制转换原始指针类型,需要reinterpret_cast
。
您使用了错误的强制转换。dynamic_cast
只适用于多态类类型,因为它在运行时执行RTTI查找。您的代码中没有使用多态类类型。要简单地将一种指针类型视为另一种指针,需要使用reinterpret_cast
:
small = reinterpret_cast<uint8_t *>(bigptr);
要编译代码,可以执行以下操作:
small = reinterpret_cast<uint8_t *>(bigptr);
但我不会这么做,你可能应该取消引用uint32_t指针,然后转换成你想要的类型——在我看来,转换成uint8_t指针没有意义。
即。
uint8_t small_one = *bigptr;
使用relpret_cast。dynamic_cast有不同的用途。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- C++类中的二维"dynamic"数组?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- protobuf in C++ with dynamic binding for google::protobuf::M
- 警告的原因是什么:"when type is in parentheses, array cannot have dynamic size"?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- "The ordinal 344 could not be located in the dynamic link library"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- Dynamic Cast C++ Fail
- dynamic-cast-c++dynamic_cast错误处理