在审查 Visual C++ 代码库时,我发现了以下奇怪的事情。运行时断言(即检查条件,如果违反条件则抛出异常) 用于可以在编译时评估条件的情况:
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
显然,编译器将评估条件并替换有效的代码
assert( true );
不执行任何操作或
assert( false );
每次控制通过该行时都会引发异常。
IMO 应该使用编译时断言,原因如下:
- 它会在编译时更早地暴露条件违规,并且
- 它将让机器代码变得更干净(因此更快、更小)
看起来编译时断言是唯一正确的事情。这里是否有任何可能的理由更喜欢运行时断言?
这里没有理由更喜欢运行时断言。您应该更喜欢编译时错误而不是运行时错误,因此,考虑到两者之间的选项,永远没有理由选择运行时断言。
但是,如果静态断言不是一种选择(不知道静态断言的概念,不知道如何制作静态断言并且没有可用的静态断言,或者知道如何制作静态断言但没有)的时间),运行时断言是下一个最好的事情。
对于 C++0x,内置static_assert
该功能应该结束在编译时断言可以工作的情况下使用运行时断言的所有理由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)