reinterpret-cast相关内容
reinterpret_cast std::pair 是否安全(理论上或实际上)const & 变成 std::pair;const &,假设程序员没有故意做一些奇怪的事情,比如专门化 std::pair? 解决方案 这样做是不可移植的. std::pair 要求在第 20.3 节中列出.第 17.5.2.3 条阐明了 第 18 到 30 条和附录
..
是否可以在 C# 中将 bool 转换为 byte 或 int(或任何整数类型,真的)无需分支? 换句话说,这不够: var myInt = myBool ?1:0; 我们可能会说我们想将 bool 重新解释为底层 byte,最好用尽可能少的指令.目的是避免分支预测失败,如 这里. 解决方案 unsafe{字节 myByte = *(byte*)&myBool;} 另一个选项是
..
这是我想做的: const int64_t randomIntNumber = reinterpret_cast;(randomUintNumber); 其中 randomUintNumber 的类型为 uint64_t. 错误是(MSVC 2010): 错误 C2440:“reinterpret_cast":无法从“const uint64_t"转换to 'int64_t
..
我正在查看此 answer,我想知道是否使用 reinterpret_cast 将对象投射到其第一个成员并使用结果在 C++ 中可能是安全的. 假设我们有一个类 A、一个类 B 和一个 B 的实例 b: A 类{上市:诠释我;无效 foo(){}};B类{上市:一个;};乙乙; 问题 1:这样使用 ba 是否安全:reinterpret_cast(&b)->foo()? 注
..
显然编译器认为它们是不相关的类型,因此需要 reinterpret_cast.为什么会有这样的规定? 解决方案 它们是完全不同的类型,见标准: 3.9.1 基本类型 [basic.fundamental] 1 声明为字符 char) 的对象应足够大存储实现的基本字符集的任何成员.如果一个该集合中的字符存储在字符对象中,积分该字符对象的值等于单个的值该字符的字符文字形式.它是实现
..
根据 cppreference.com,reinterpret_cast: 通过重新解释底层位模式在类型之间进行转换. 但是等等,这是一个谎言,因为它只在这些情况下有效: 当 T1 类型的对象的指针或引用是 reinterpret_cast(或 C 风格强制转换)时,指向不同类型 的对象的指针或引用T2,强制转换总是成功,但结果指针或引用只有在 T1 和 T2 都是标准布局类型和
..
考虑到以下代码(和VirtualAlloc() 返回一个 void*): BYTE* pbNext = reinterpret_cast(VirtualAlloc(NULL, cbAlloc, MEM_COMMIT, PAGE_READWRITE)); 为什么选择 reinterpret_cast 而不是 static_cast? 我曾经认为 reinterpret_cast 可以用于例
..
首先,这不是 为什么我们要在 C++ 中使用 reinterpret_cast,而两个链接的 static_cast 可以完成它的工作?. 我知道我们甚至不能使用两个链接的 static_cast 来实现这一点的情况,reinterpret_cast 可以做什么.但是在任何情况下,我应该更喜欢两个链接的 static_cast 而不是简单且更具可读性的 reinterpret_cast?
..
我有以下模板函数用于将任何标准类型的数据转储到二进制输出流中. template静态无效转储 (const T& v, ostream& o) {o.write ( reinterpret_cast(&v), sizeof(T));} 除了 reinterpret_cast,我还可以使用 C 风格(const char*).使用 reinterpret_cast 有什么特别的理由吗?我阅读了其
..
假设我想将 A* 转换为 char* 反之亦然,我们有两个选择(我的意思是,我们中的许多人认为我们有两个选择,因为两者似乎都有效!因此混乱!): 结构体A{年龄;字符名称[128];};一个;char *buffer = static_cast(static_cast(&a));//选择1char *buffer = reinterpret_cast(&a);//选择2 两者都工作正常. /
..
我知道 reinterpret_cast 很危险,我只是为了测试它.我有以下代码: int x = 0;double y = reinterpret_cast(x); 当我尝试编译程序时,它给了我一个错误提示 从“float"类型到“double"类型的无效转换 这是怎么回事?我认为 reinterpret_cast 是你可以用来将苹果转换为潜艇的流氓演员,为什么这个简单的演员不能
..
根据cppreference.com,reinterpret_cast: 通过重新解释底层位模式在类型之间进行转换. 但是等等,那是谎言,因为它只在这些情况下有效: 当对 T1 类型的对象的指针或引用是 reinterpret_cast(或 C 风格的强制转换)到不同类型的对象的指针或引用时 T2,转换总是成功,但只有当 T1 和 T2 都是标准布局类型和以下之一时,才能访问结果
..
我正在读一本书,我发现不应该直接使用 reinterpret_cast,而是将转换为 void* 与 static_cast 结合使用: T1 * p1=...无效 *pv=p1;T2*p2=static_cast(pv); 代替: T1 * p1=...T2*p2=reinterpret_cast(p1); 然而,我找不到解释为什么这比直接演员更好.如果有人能给我一个解释或指出我的答案,
..
reinterpret_cast std::pair 是否安全(理论上或实践中)?const & 转换为 std::pairconst &,假设程序员没有故意做一些奇怪的事情,比如专门化 std::pair? 解决方案 这样做不可移植. std::pair 要求在第 20.3 条中列出.第 17.5.2.3 条阐明 第 18 条到第 30 条和附件 D 没有指定类的表示,并有意
..
我有一个类模板 A,它包含一个指针容器 (T*): template A类{上市://...私人的:std::vector数据;}; 还有一堆函数,比如: void f(const A&);void g(const A
..
static_cast 和 reinterpret_cast 似乎都可以很好地将 void* 转换为另一种指针类型.是否有充分的理由偏爱其中一个? 解决方案 使用 static_cast:它是最窄的强制转换,准确地描述了此处进行的转换.> 有一种误解,认为使用 reinterpret_cast 会更好,因为它意味着“完全忽略类型安全,只是从 A 转换到 B". 然而,这实际上并没有
..
我对 reinterpret_cast 与 static_cast 的适用性有点困惑.从我读到的一般规则是,当类型可以在编译时解释时使用静态转换,因此使用 static 这个词.这也是 C++ 编译器在内部用于隐式转换的转换. reinterpret_casts 适用于两种场景: 将整数类型转换为指针类型,反之亦然 将一种指针类型转换为另一种.我得到的一般想法是这是不可移植的,应该避
..
当我调用从主可执行文件传递的 std::function 时,我在插件中遇到了段错误,方法是将其地址转换为 void*.我可以用几行独立的代码重现这个问题: #include #include int main(){使用 func_t = std::function;自动 hn_getter = func_t{[]() {return "你好";}};
..
我正在查看 https://en.cppreference.com/w/cpp/language/reinterpret_cast 并且我注意到它指定了我们总是可以转换为的合法类型: 字节* char* unsigned char* 但我没有在列表中看到void*.这是疏忽吗?我的用例需要 reinterpret_cast,因为我从 int** 转换到 void*.我最终将从 vo
..
我不确定问题是否在这里回答这个问题,因为措辞很奇怪,但是: 如果我有: struct numpair{some_type_with_a_size_of_2 a,b;};结构体{some_type_with_a_size_of_4 a;}; 我可以将 bignums 向量重新解释为 numpairs 向量吗?如果没有,是否还有其他解决方法不需要我创建一个新向量并重新解释每个元素的转换?
..