标题不言自明:我想将任意大量可简单复制的非数组“东西”序列化到缓冲区中(出于学术原因)。 基本思路是将我要序列化的地址重新解释为unsigned char*,然后用std::copy到那个buffer中,反向操作加载。 这是一个最小的非工作示例。 如果我只写一个 A,它就可以正常工作。 我也可以写任 ...
标题不言自明:我想将任意大量可简单复制的非数组“东西”序列化到缓冲区中(出于学术原因)。 基本思路是将我要序列化的地址重新解释为unsigned char*,然后用std::copy到那个buffer中,反向操作加载。 这是一个最小的非工作示例。 如果我只写一个 A,它就可以正常工作。 我也可以写任 ...
C++ 中有一个很好的功能,您可以说 function 的返回类型为“auto”,编译器会计算出来。 但是,如果我在出错时返回一个指针和 nullptr 怎么办? 不知何故,编译器无法推断出正确的类型并给出错误。 在下面的简单示例中,假设std::vector<int>计划在未来完全 ...
假设我有这段代码: 我想要的只是将bits变量中的位解释为浮点数。 我开始明白这叫做“类型双关”。 上面的代码目前在我的机器上工作,GCC 10 on Linux。 我使用这种方法“重新解释位”已经有一段时间了。 然而,最近我从这篇文章中了解到“严格的别名规则”: 什么是严格的别名规则? 我从那里 ...
请注意,我引用的是工作代码,我正在尝试实现相同的方法,但使用的是CString 。 以下方法有效,将 integer 转换为空指针: 而如果我对 CString 执行相同的操作,则会出现以下错误: 错误: 是因为从根本上说你不能对CString做同样的事情吗? 我试着在 inte.net 上搜索, ...
我需要使用 function func(uint8_t* buffer, uint size) ; 假设我不能改变它的参数,我想给它传递一个字符串。 我有一个必须转换为uint8_t*的vector<string> ,然后读取它并将其转换回vector<string> 。 ...
据我了解,C++ 标准允许将 function 指针转换为不同的类型(只要从不调用它们):int my_func(int v) { return v; } int main() { using from_type = int(int); using to_type = void( ...
阅读https://en.cppreference.com/w/cpp/language/reinterpret_cast我想知道reinterpret_cast的用例有哪些不是 UB 并且在实践中使用? 上面的描述包含许多情况,其中将指针转换为其他类型然后再转换回来是合法的,这是合法的。 但这似乎 ...
请检查以下 c++ 代码:(没什么特别的,应该符合 c++ 1991 年第 2 版) 基本条件class CNullable 遵循众所周知的基本可空模式,即在某些框架中针对 c# 实施,但也可以是具有一个参数的任何模板。 顾名思义,TEnum 用于不同的枚举类型。 即enum FooEnum { ...
我希望 dval 具有某个值,当以十六进制编写时,它看起来像这样“0x543”。 这样做有什么危险吗? 您看到更有效的方法了吗? 谢谢 ...
我正在学习教程,并且正在使用以下代码将二进制文件读入数组: 我的问题首先是为什么我们可以将整数数组转换为字符? 这里的基本逻辑是什么? 其次,我想知道我们不应该在这里使用参考作为输入吗? 我的理解是outputArrary将只是这个函数的 scope 中的一个副本 ...
很长一段时间我都像这样使用reinterpret_cast : static_assert(sizeof(int) == sizeof(float)); int a = 1; float b = *reinterpret_cast<float*>(&a); // viewed a ...
例子: std::function<void()>和std::function<std::monostate()>是否认为“相似”足以使reinterpret_cast安全? 编辑:有人让我澄清我在问什么。 我不是在问 foo<X> 和 foo<Y> ...
免责声明:我知道这是一种不安全的操作和不好的做法,我只是想知道它是否可能。 基本上,我正在尝试将 object 引用转换为nint ( IntPtr )。 它们在memory中占据相同的大小,所以理论上应该是可以的。 我已经使用 DynamicMethod 让它工作: 这是否可能仅使用 C# 代码 ...
应该如何将指针转换为char* / const char* ? 使用reinterpret_cast ? 或者可能是std::bit_cast ? 一个简单的例子: 这似乎工作正常。 同样用reinterpret_cast替换所有std::bit_cast也可以正常工作。 那么在这种情况下哪 ...
我正在将一个 C 代码库移植到 C++11,该代码库使用了许多自定义的侵入式数据结构。 在 C 中,使用模式通常如下所示: struct foo { // some members struct data_structure_node node; }; // user code str ...
为什么第二个示例在将地址存储在 int 指针中然后读取相邻位之后找到 1100 而不是 0000? 示例 1: val = 97 或 0110 0001 示例 2: val = -858993567 或 1100 1100 | 1100 1100 | 1100 1100 | ...
我遇到了一个代码片段,其中使用memcpy()将缓冲区中的字节复制到结构变量中: 我将其更改为: 我的目标是避免将缓冲数据从p_data复制到局部变量m_hdr中,而只是使MtaHeader*指针指向p_data 。 我所做的是否正确,我是否使代码更快? 结构的元素会得到正确的值吗? 另 ...
以下Rust代码:use std::mem; fn main() { #[derive(Debug)] #[repr(C)] struct Test { y: f32, x: u32, } let a = Test { x: ...
我正在用 Crypto++ 库做一些实验,我不明白为什么在reinterpret_cast之前长度是 20 字节而之后只有 8 个字符而不是 10 个字符。非常感谢您的关注。 PS 很抱歉,如果问题没有按照指南提出,我是新来的。 也许它不是很笼统,但我希望它对其他人有用。#include "cr ...
我正在尝试将 function、createArray 转换为 constexpr function。此 function 从 memory 中的连续部分创建一个数组,该数组由两个任意命名的变量_start_array和_stop_array 。 我能够在两者之间迭代,当程序运行时它打印 这是到目前 ...