如果你不熟悉,就不要用!

最近几天检查代码的时候发现,很多问题都是因为滥用C/C++的某些语法特性而引起的.
例如滥用继承和纯虚函数,仿佛没有了OO C++ 就不叫C++一样.
事实上,C/C++中有很多关键字完全就是废物,如果你一定要惊讶于这些废物为什么还存
在,那么理由就是:”兼容性”.标准中会把一个关键字或者某个函数或者某种语法格式
标记为过时的、不建议使用的,但是事实是,即便再过10年,再过20年,它依然存在。
而还有一些关键字和语法格式,在使用的时候被发现用起来十分不方便和别扭,于是渐
渐也也就被人们打入了冷宫。
其中比较明显的,如inline,register,auto.再如,我最近比较怕见到的,异常规格.
e.g.
int func(void) throw(std::exception ex&);
你怎么知道这个函数不会抛出异常呢?你怎么确保这个函数只会抛出你所指定的异常
呢?如果它抛出的是其它的异常,那么?
A1: 即便是纯c写的函数,也是有可能会抛出异常的。例如我可以在另外一个文件中执
行signal函数注册一个信号处理函数,然后把系统的所有的信号都转换为C++的异常
(这是网上很多教程中最热衷于教授的技巧)。
A2: 唯一的做法就是用try..catch包围所有的代码。
例如
int func_impl(void); ///真正的实现函数
int func(void) throw(std::exception ex&){
try{
return func_impl(void);
} catch(std::exception ex&) {
throw;
} catch(…){ ///忽视其它所有异常
}
}
A3: 默认情况下,程序会中止。如果它心情好的话,会给你一个Core dump。
然而很多人仅仅是因为C++有异常而C没有异常这种东西,就呼啦呼拉的大用异常。其实
有时候完全没有想到异常会让自己的代码变得多么的复杂。
仅仅以此为例。
如果保持代码的简洁,如何把整个系统的复杂度控制住。(在开发的时候不断地想引入
新东西,直到最后整个系统变成一团谁都理不清楚的乱麻)。太多需要考虑的了,唉

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥