来自Sutter&Alexandrescu的编码标准的一个例子引起了我的注意"示例2 :( std::string::append后置条件错误).当将字符附加到字符串时,如果现有的缓冲区已满,则无法分配新缓冲区会阻止操作执行其记录的功能并实现它记录的后期条件,因此是一个错误."
我无法想象在任何正常条件下,人们会检查追加的返回值,但很奇怪这个值是什么,结果证明是*this(它只能在非静态成员函数中使用).我想可以检查追加前后的字符串长度,但是如何才能访问*this?
例如:
std::string::s = "Hello World";
for (int i=0; i<many millions; ++i) {
s.append(s);
}
s.append("."); // Which we assume fails due to a buffer error.
Run Code Online (Sandbox Code Playgroud)
错误检查设施string以及大多数标准库是通过异常完成的,而不是通过返回值.
如果append失败,它将通过异常退出,否则,操作成功并获得有效的返回值.因此,既不必要也不可能检查返回值中的错误.
正如评论中指出的那样,所述返回值可以用于例如连锁操作.
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |