在查看 Visual C++ 代码库时,我发现了以下奇怪的事情。在可以在编译时评估条件的情况下使用运行时断言(检查条件并在违反条件时抛出异常):
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
很明显,编译器将评估条件并替换有效的代码
assert( true );
什么都不做或
assert( false );
每次控制通过该行时都会引发异常。
IMO 应该使用编译时断言,原因如下:
- 它会更早地暴露条件违规 - 在编译时 - 并且
- 它会让更干净(因此更快更小)的机器代码被发出
看起来编译时断言是唯一正确的事情。是否有任何可能的理由在这里更喜欢运行时断言?