您能否举一个示例,用static_assert(...)
('C++ 11')轻松解决问题?
我熟悉运行时assert(...)
。我何时应该比常规static_assert(...)
更喜欢assert(...)
?
另外,在boost
中有一个叫做BOOST_STATIC_ASSERT
的东西,它与static_assert(...)
一样吗?
最佳答案
从我头顶上...
#include "SomeLibrary.h"
static_assert(SomeLibrary::Version > 2,
"Old versions of SomeLibrary are missing the foo functionality. Cannot proceed!");
class UsingSomeLibrary {
// ...
};
假设
SomeLibrary::Version
声明为静态const,而不是#define
d(就像在C++库中所期望的那样)。与必须实际编译
SomeLibrary
和代码,链接所有内容并仅运行可执行文件相反,然后才发现您花了30分钟的时间来编译SomeLibrary
的不兼容版本。@Arak,针对您的评论:是的,从外观上,您可以将
static_assert
放在任何地方:class Foo
{
public:
static const int bar = 3;
};
static_assert(Foo::bar > 4, "Foo::bar is too small :(");
int main()
{
return Foo::bar;
}
$ g++ --std = c++ 0x a.cpp
a.cpp:7:错误:静态声明失败:“Foo::bar太小:(”