分享

C/C++如何实现静态断言?

 深入敌后_ 2013-04-09

C/C++如何实现静态断言?

0
悬赏园豆:200 [已解决问题] 浏览: 99次

比如说:

S_ASSERT(sizeof(char) > sizeof(int)) 

会导致一个编译错误。

c++
嗷嗷的主页 嗷嗷 | 菜鸟二级 | 园豆:322
提问于:2012-09-14 13:28
最佳答案
1

如果是C++11的话,可以使用static_assert。

在static_assert之前,还有些其他方法可以来实现类似的功能。如这些宏:

#define STATIC_ASSERT_2(ex) \ do { typedef int ai[(ex) ? 1 : 0]; } while(0)

# define STATIC_ASSERT_3(ex) \ do { typedef int ai[(ex) ? 1 : -1]; } while(0)

#define STATIC_ASSERT_4(ex) \ switch(0) { case 0: case ex:; }

#define STATIC_ASSERT_5(ex) \ struct x { unsigned int v : ex; }

这行就会在编译期报错。 STATIC_ASSERT_1(sizeof(int) < sizeof(short))


补充一种办法:

#define COMPILE_ASSERT(x)  \

        enum {CAT_TOKEN (o, __LINE__) = 1 / !!(x) };

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多