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

baibaichen 2005-12-23 09:41:38
在这个贴子中: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是否为有符号的类型,如无符号则出错!

...全文
208 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baibaichen 2005-12-23
  • 打赏
  • 举报
回复
sinall() 说的不错,和函数重载的方法确实差不多,但是:
1)这是编译时的检查,宁愿编译或连接时出错,也不要运行时出错(http://spaces.msn.com/members/baibaichen/Blog/cns!1pSn15h7GAJj-DDnbJ5h8Q8Q!148.entry)
2)简单,可读且肯定可移植,正确,简单和清晰第一(http://spaces.msn.com/members/baibaichen/Blog/cns!1pSn15h7GAJj-DDnbJ5h8Q8Q!127.entry)
sinall 2005-12-23
  • 打赏
  • 举报
回复
嗯,和函数重载的方法差不多。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧