是否有可能的,比方说,一个显式类型转换int32_t
到uint32_t
,改变值的位表示?
例如,鉴于我有以下联合:
typedef union {
int32_t signed_val;
uint32_t unsigned_val;
} signed_unsigned_t;
Run Code Online (Sandbox Code Playgroud)
规范保证这些代码段是否具有相同的行为?
uint32_t reinterpret_signed_as_unsigned(int32_t input) {
return (uint32_t) input;
}
Run Code Online (Sandbox Code Playgroud)
和
uint32_t reinterpret_signed_as_unsigned(int32_t input) {
signed_unsigned_t converter;
converter.signed_val = input;
return converter.unsigned_val;
}
Run Code Online (Sandbox Code Playgroud)
我在这里考虑C99.我已经看到了一些类似的问题,但他们似乎都在讨论C++,不C.
我正在尝试为包含三种不同类型的列表元素(分别以 - ,o和x开头)的小文本格式编写语法高亮模块,并且我想基于它们的类型突出显示条目.对于单行来说很容易,我只是使用了一个syn match myGroup /^\s\+- .\+/
而且我已经完成了.
问题是,我一直在尝试这样做,以便没有列表标记的下一行保持与起始列表项行相同的颜色,但没有成功.我一直试图用语法区域来做,但我似乎无法理解它们是如何工作的.
如果文件格式需要进行任何更改以便更容易/可能,我可以自由更改它.
任何线索我怎么能得到它?
我正在研究我的一个学习项目(在C中),并考虑将其迁移到C++以获得额外的学习点.它的一部分涉及一个特定系列对象的垃圾收集系统,在C中,我通常使用一个大的malloc/mmap实现并使用简单的天真标记和扫描(我可以识别引用和类似的东西)已经).
我的问题是我正在考虑将这个想法转移到C++,但对我对其内存管理方案的理解感到不够安全.
到目前为止,我考虑分配一个大内存池并在基类上重载operator new和delete来调用我的内存池的抓取/释放函数,然后让垃圾收集器的扫描阶段删除它们看到的对象.够了吗?我在这里看不到有什么隐藏的陷阱?
编辑:澄清一下,我已经能够计算出已分配对象的生命周期,因此不需要使用gc abi.这些对象很少被c ++代码操纵,并且使用它们的代码能够通知他们正在使用它们而无需检查堆栈.