我有以下代码:
#include <cstdint>
template <typename T>
T test(T a, T b)
{
float aabb = reinterpret_cast<float>(a - b);
}
int main(int argc, const char *argv[])
{
std::uint8_t a8, b8;
test(a8, b8);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道它reinterpret_cast<float>无法工作,并且它在编译时出错.我正在使用该错误,以便编译器告诉我类型a - b.
问题是,在这种情况下,它说的类型a - b是int当两者都是uint8_t (unsigned char).同样的事情发生在uint16_t.但不能与uint32_t它说a - b是unsigned int.
所以,我的问题是:这是预期的行为(unsigned char - unsigned char给出一个int),还是这种奇怪的编译器bug(用GCC和clang测试过)?
我通常用 C 编写代码,我的 .vimrc 中也有set foldmethod=syntax,它工作得很好,因为它折叠了大括号和注释以及所有内容。
但有时我需要折叠大块代码,以免它们妨碍我(例如一组相关函数),我通常使用set foldmethod=marker和 标记>>>和 来完成此操作<<<。
我一直在尝试添加一个新的同步区域,我最近得到的是:
syn region cFoldMarkers start='>>>' end='<<<' containedin=cComment transparent fold
Run Code Online (Sandbox Code Playgroud)
但这会造成混乱,因为它在某种程度上与评论相匹配。
有没有办法同时实现这两个目标?或者我应该放弃使用语法来执行此操作,而只为大括号、注释和我的自定义标记设置标记?
提前致谢