如何在编译时判断一个~类型~是否为unsigned

baibaichen baibaichen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在这个贴子中:VIA笔试题,怎么写程序判断一个数是unsigned int还是int?(http://community.csdn.net/Expert/topic/4359/4359119.xml?temp=.8052027)

在该贴中我曾经提出“C++是静态编译的,在编译时就应已经知道变量的类型啊?”,后来在一次编程实践中,我发现在标准库有太多的typedef,你可能一不小心写下这样的代码:

#ifdef USE_UNSIGNED_INT
typedef unsigned int size;
#else
typedef int size;
#endif

latter in the program:
size i = XXX;
for (; i >=0 ; i--) //problematic, if the i is the unsigned it!!!
{
}

这段代码有问题的!如果size被定义成无符号类型,那么这将是一个无限循环!昨天我去各论坛问了下“如何在编译时判断一个~类型~是否为unsigned”,现在已经找到方法了:

#include <boost/static_assert.hpp>
#include <limits>

BOOST_STATIC_ASSERT(std::numeric_limits<size>::is_signed);

该方法会在编译时判断size是否为有符号的类型,如无符号则出错!

...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
baibaichen
C++ 语言 65,214 成员 250,514 内容