c++ - 编译时检查变量是否有符号/无符号
问题描述
我试图想出一些编译时方法来检查某个变量是有符号还是无符号。实际上,我使用以下宏已经有很长一段时间来检查有符号变量:
#ifdef _DEBUG
#define CHECK_SIGNED(v) if((v) == -(v)){}
#else
#define CHECK_SIGNED(v)
#endif
然后以下将通过它:
INT rr = 0;
CHECK_SIGNED(rr);
而以下:
UINT rr = 0;
CHECK_SIGNED(rr);
将产生编译时错误:
错误 C4146:一元减号运算符应用于无符号类型,结果仍然无符号
所以现在我正在尝试对unsigned
变量进行类似的检查。有什么建议么?
PS。虽然我正在使用VS 2017
它,但让它向后兼容旧的 C++ 标准会很好。
解决方案
可以使用这样的东西:
static_assert(std::is_signed<decltype(rr)>::value, "Not signed number");
和姐妹版std::is_unsigned
此外,为了支持旧编译器,您自己实现这些并不是很困难。
推荐阅读
- java - 如何在不破坏模板的情况下编辑 docx 模板?
- javascript - 在 Angular 中显示 ContentFul RichText
- javascript - 从数组中删除绑定了不同参数的相同函数
- docusignapi - 填充模板textTab,如何换行文本值?
- javascript - 在 map 函数中运行 axios.get 会返回一个 Promise
- c++ - 使用 C++17 扩展使用声明的问题
- javascript - 如何从 UI5 中的父上下文获取 OData 上下文
- jenkins - Jenkins 文件差异与声明性管道和多分支
- node.js - Sequelize 关联/模型在没有任何更改时突然无法识别,模糊错误无法读取未定义的属性“字段”
- c# - 如何使用以编程方式返回 FileContentResult 的 API 调用