c++ - 如何将 size_t 类型的指针转​​换为 enum 的指针?

标签 c++ pointers

我想给这个容器分配一个 size_t :

  std::vector <nts::Tristate *>   _components;

为此,我尝试将 const size_t & 转换为 nts::Tristate *

this->_components[0] = static_cast<nts::Tristate *>(&value);

但是我有以下错误:

error: invalid static_cast from type ‘const size_t* {aka const long unsigned int*}’ to type ‘nts::Tristate*’
     this->_components[0] = static_cast<nts::Tristate *>(&value);

知道为什么吗?

最佳答案

不用问为什么你想做那样的事情,问题是这两种类型(size_t*nts::Tristate*) 完全不相关,您需要将一种类型重新解释为另一种类型。你用 reinterpret_cast 做事.

应该注意的是,做这样的事情很可能会导致其他问题,这些问题会导致未定义的行为。您需要注意的一件事是 value 是否是一个局部变量,因为这样您就存储了一个指向该局部变量的指针,该变量将超出范围并消失。另一个是使用 _components[0] 的程序的其余部分需要知道它实际上不是指向 nts::Tristate 对象的指针,而是指向 size_t 值。简而言之,你的所作所为非常危险。

关于c++ - 如何将 size_t 类型的指针转​​换为 enum 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456582/

相关文章:

c++ - 如何更改此代码以在一部分(而不是 2 部分)中从串口读取所有数据?

c - memcpy 在具有指向指针参数的指针的不同函数中

c - 指向内存负地址的 C 编译器行为是什么?

c++ - Visual Studio 2015 “non-standard syntax; use ' &' to create pointer for member”

c++ - std::vector<std::wstring> 移动/重新分配内部 wstring.data() 合法吗?

c++ - 将 std::vector<std::shared_ptr<T>> 转换为 std::vector<std::shared_ptr<const T>>

c - 返回指向数组中最大数的指针的函数

c - 当影响 int 的值时明显出现段错误

C++ 导入和重命名/重新保存图像

c++ - 如何使用线程将内容从一个文件复制到多个文件