什么叫鲁棒?
今天看了下《剑指Offer》,关于什么叫鲁棒的问题,我是有不同见解的,举个例子,求解字符串长度
int strlen(const char* s) {
int count = 0;
while (*s != '\0') {
++count;
s++;
}
return count;
}
如果面试官没有特别要求,我认为代码写成上面这样是没问题的,对于空指针的问题,我认为这里不需要判断,甚至不应该判断,如果使用者传入了空指针,就是应该让它崩溃。我们需要搞清楚,崩溃是操作系统给应用程序的警告,是底层库开发者给上层逻辑开发者的警告。作为调用者必须(而不是尽量)知道、并满足参数类型,字符串就不应该是空指针。
事实上,底层库就是这样设计的,它这样设计就是有着明确的目的,该崩溃的时候果断崩溃,让调用者去修改代码,而不是隐藏错误。各位面试官可以多思考一下底层库这样设计的初衷,想想我说的是否有道理
就像脚本语言一样,有人认为脚本语言不会crash,C++的程序做的不好就crash,然后大肆诋毁C++,吹捧脚本语言,这是舍本逐末。C++程序可以轻松的做到捕获几乎所有的异常,让程序不crash,但是这样没有意义,隐藏错误没有意义,相反,隐藏错误会让调用者写出越来越差的代码,让整个系统低效、低质,有一句话说得好“脚本一时爽,重构火葬场”。暴露错误的代码才是质量高的代码,阳光是最好的防腐剂。
crash就是操作系统给应用程序开发者的警告,作为操作系统完全可以默默的吃掉这个警告,不发送给程序,操作系统开发者傻么?
当然,也不要误解我的观点,字符串是不应该是nullptr的,但是链表中的元素指针完全可以为nullptr,这是两种场景,不要混为一谈
