对C++的一点吐槽

不得不说C++真是反人类啊。web

一样一个函数,须要在头文件中声明,在源文件中实现。安全

具体到Qt实现的时候,对于一个小功能,须要在头文件中注册一个Slot,注册一个Signal,声明一个发送signal的函数,再在源文件中写出Slot的实现,再在初始化时将signal和slot连接到一块儿,最后还要实现函数emit Signal。svg

具体到ROS实现的时候,对于同一个话题,须要在源文件中声明话题名,订阅器,订阅函数;须要在源文件中将话题名声明成参数,将订阅者和订阅函数绑定到一块儿,最后再写出订阅函数的实现。函数

也就是说,即便只作一件很是简单的事情,须要改动程序的6个地方,并且这6个地方互不关联,分布也很是散。若是没有很是好的明明习惯和良好的代码风格很快就不可维护了。线程

另外,若是涉及到指针,还要操心指针何时释放,如何写能够提升效率,如何保证指针是线程安全的。。。指针

除此以外,写任何一个变量,函数,类的时候都要反复考虑这种写法是否高效,命名有没有问题,该不应加命名空间,一个地方没写好就等着迎接别人的吐槽吧。xml

即便上面写的都没问题,最终的程序还要写CMakeLists或者makefile来管理,这里又有不少学问。且中文资料极少,须要本身查阅大量的英文手册才能有初步了解从而看懂别人写的makefile或者CMake文件(曾几什么时候会写cmake一度让我颇有优越感,直到这几天看一些开源库的CMake彻底看不懂才发现本身真是图样)。这就形成工程里之后再有任何改动你都须要回来修改这两个文件。ROS还加了一个package.xml也须要手动修改,不然编译报错。一直很想吐槽既然你能够检查CMake和package是否一致那干吗不把这俩合成一个或者用cmake自动生成package.xml啊!it

因此,在科研中,除非思路已经很是清晰,不然不要直接上C++,最好是有成熟的Python或者MATLAB实现再一步步改写成C++。若是一边想一边写的话很快本身就乱套了。编译

珍爱生命,远离C++。效率