sha*_*oth 5 c++ assert error-checking visual-c++
在查看Visual C++代码库时,我发现了以下奇怪的事情.在编译时可以评估条件的情况下,使用运行时断言(检查条件并在违反条件时抛出异常):
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
Run Code Online (Sandbox Code Playgroud)
很明显,编译器将评估条件并替换有效的代码
assert( true );
Run Code Online (Sandbox Code Playgroud)
什么都不做或
assert( false );
Run Code Online (Sandbox Code Playgroud)
每次控件通过该行时都会抛出异常.
IMO应该使用编译时断言,原因如下:
看起来像编译时断言是唯一正确的事情.有没有可能的理由在这里更喜欢运行时断言?
GMa*_*ckG 16
这里没有理由更喜欢运行时断言.您应该更喜欢编译时错误而不是运行时错误,因此在两者之间选择运行时断言时,绝不会有任何理由.
但是,如果静态断言不是一个选项(不知道静态断言的概念,不知道如何制作一个并且没有一个可用,或者知道如何制作一个但没有时间到),运行时断言是下一个最好的事情.
使用C++ 0x,内置static_assert功能应该结束所有使用运行时断言的理由,其中编译时断言可以工作.
| 归档时间: |
|
| 查看次数: |
4582 次 |
| 最近记录: |