reinterpret-cast相关内容

C# 将 bool 重新解释为 byte/int(无分支)

是否可以在 C# 中将 bool 转换为 byte 或 int(或任何整数类型,真的)无需分支? 换句话说,这不够: var myInt = myBool ?1:0; 我们可能会说我们想将 bool 重新解释为底层 byte,最好用尽可能少的指令.目的是避免分支预测失败,如 这里. 解决方案 unsafe{字节 myByte = *(byte*)&myBool;} 另一个选项是 ..
发布时间:2022-01-19 17:52:23 C#/.NET

reinterpret_cast 从对象到第一个成员

我正在查看此 answer,我想知道是否使用 reinterpret_cast 将对象投射到其第一个成员并使用结果在 C++ 中可能是安全的. 假设我们有一个类 A、一个类 B 和一个 B 的实例 b: A 类{上市:诠释我;无效 foo(){}};B类{上市:一个;};乙乙; 问题 1:这样使用 ba 是否安全:reinterpret_cast(&b)->foo()? 注 ..

为什么我不能在 char * 和 unsigned char * 之间进行静态转换?

显然编译器认为它们是不相关的类型,因此需要 reinterpret_cast.为什么会有这样的规定? 解决方案 它们是完全不同的类型,见标准: 3.9.1 基本类型 [basic.fundamental] 1 声明为字符 char) 的对象应足够大存储实现的基本字符集的任何成员.如果一个该集合中的字符存储在字符对象中,积分该字符对象的值等于单个的值该字符的字符文字形式.它是实现 ..
发布时间:2022-01-12 20:16:50 C/C++开发

为什么不 reinterpret_cast 强制 copy_n 用于相同大小类型之间的强制转换?

根据 cppreference.com,reinterpret_cast: 通过重新解释底层位模式在类型之间进行转换. 但是等等,这是一个谎言,因为它只在这些情况下有效: 当 T1 类型的对象的指针或引用是 reinterpret_cast(或 C 风格强制转换)时,指向不同类型 的对象的指针或引用T2,强制转换总是成功,但结果指针或引用只有在 T1 和 T2 都是标准布局类型和 ..
发布时间:2022-01-09 19:11:44 C/C++开发

C++ 什么时候我们应该更喜欢使用两个链接的 static_cast 而不是 reinterpret_cast

首先,这不是 为什么我们要在 C++ 中使用 reinterpret_cast,而两个链接的 static_cast 可以完成它的工作?. 我知道我们甚至不能使用两个链接的 static_cast 来实现这一点的情况,reinterpret_cast 可以做什么.但是在任何情况下,我应该更喜欢两个链接的 static_cast 而不是简单且更具可读性的 reinterpret_cast? ..
发布时间:2021-12-31 21:52:31 C/C++开发

当两个链接的 static_cast 可以完成它的工作时,为什么我们在 C++ 中有 reinterpret_cast ?

假设我想将 A* 转换为 char* 反之亦然,我们有两个选择(我的意思是,我们中的许多人认为我们有两个选择,因为两者似乎都有效!因此混乱!): 结构体A{年龄;字符名称[128];};一个;char *buffer = static_cast(static_cast(&a));//选择1char *buffer = reinterpret_cast(&a);//选择2 两者都工作正常. / ..
发布时间:2021-12-31 21:45:10 C/C++开发

为什么这个 reinterpret_cast 不能编译?

我知道 reinterpret_cast 很危险,我只是为了测试它.我有以下代码: int x = 0;double y = reinterpret_cast(x); 当我尝试编译程序时,它给了我一个错误提示 从“float"类型到“double"类型的无效转换 这是怎么回事?我认为 reinterpret_cast 是你可以用来将苹果转换为潜艇的流氓演员,为什么这个简单的演员不能 ..
发布时间:2021-12-31 21:44:51 C/C++开发

为什么不 reinterpret_cast 强制 copy_n 用于相同大小类型之间的转换?

根据cppreference.com,reinterpret_cast: 通过重新解释底层位模式在类型之间进行转换. 但是等等,那是谎言,因为它只在这些情况下有效: 当对 T1 类型的对象的指针或引用是 reinterpret_cast(或 C 风格的强制转换)到不同类型的对象的指针或引用时 T2,转换总是成功,但只有当 T1 和 T2 都是标准布局类型和以下之一时,才能访问结果 ..
发布时间:2021-12-31 21:43:39 C/C++开发

通过 void* 进行转换,而不是使用 reinterpret_cast

我正在读一本书,我发现不应该直接使用 reinterpret_cast,而是将转换为 void* 与 static_cast 结合使用: T1 * p1=...无效 *pv=p1;T2*p2=static_cast(pv); 代替: T1 * p1=...T2*p2=reinterpret_cast(p1); 然而,我找不到解释为什么这比直接演员更好.如果有人能给我一个解释或指出我的答案, ..

正在铸造 std::pair<T1, T2>常量&到 std::pair常量&安全的?

reinterpret_cast std::pair 是否安全(理论上或实践中)?const & 转换为 std::pairconst &,假设程序员没有故意做一些奇怪的事情,比如专门化 std::pair? 解决方案 这样做不可移植. std::pair 要求在第 20.3 条中列出.第 17.5.2.3 条阐明 第 18 条到第 30 条和附件 D 没有指定类的表示,并有意 ..
发布时间:2021-12-13 19:15:26 C/C++开发

我应该在将 void* 转换为任何内容时使用 static_cast 还是 reinterpret_cast

static_cast 和 reinterpret_cast 似乎都可以很好地将 void* 转换为另一种指针类型.是否有充分的理由偏爱其中一个? 解决方案 使用 static_cast:它是最窄的强制转换,准确地描述了此处进行的转换.> 有一种误解,认为使用 reinterpret_cast 会更好,因为它意味着“完全忽略类型安全,只是从 A 转换到 B". 然而,这实际上并没有 ..
发布时间:2021-12-13 12:44:40 C/C++开发

何时使用 reinterpret_cast?

我对 reinterpret_cast 与 static_cast 的适用性有点困惑.从我读到的一般规则是,当类型可以在编译时解释时使用静态转换,因此使用 static 这个词.这也是 C++ 编译器在内部用于隐式转换的转换. reinterpret_casts 适用于两种场景: 将整数类型转换为指针类型,反之亦然 将一种指针类型转换为另一种.我得到的一般想法是这是不可移植的,应该避 ..
发布时间:2021-12-01 15:44:29 C/C++开发

reinterpret_cast-ing 将一种类型的向量转换为相同类型的另一种类型的向量

我不确定问题是否在这里回答这个问题,因为措辞很奇怪,但是: 如果我有: struct numpair{some_type_with_a_size_of_2 a,b;};结构体{some_type_with_a_size_of_4 a;}; 我可以将 bignums 向量重新解释为 numpairs 向量吗?如果没有,是否还有其他解决方法不需要我创建一个新向量并重新解释每个元素的转换? ..
发布时间:2021-09-17 19:15:05 C/C++开发