assert是运行期断言,也就是在编译期出现的错误,它不会提示; 而boost中的BOOST_STATIC_ASSERT是在编译期的断言,也就是说在编译的时候就可以断言出错误。 比如下面的函数:
编译的时候就会提示 static_assert.cpp: In function 'void expects_ints_to_be_4bytes()': 也就是BOOST_STATIC_ASSERT的断言。把这行改成BOOST_STATIC_ASSERT(sizeof(int)==4);再编译,不会提示错误。而assert(sizeof(int)!=4)这行在运行的时候 会提示错误。 所以,一个是编译期的断言,一个运行期的断言,两个可以起到很好的互补作用
以下情形下使用 BOOST_STATIC_ASSERT : 当条件可以在编译期进行求值 对类型的要求可以在编译期表示 你需要对两个或以上的整型常量间的关系进行断言 (linzhangkun) |