灵活的C++
众所周知C++包罗万象,支持很多范式。
C++语言似乎就是想包容一切其他语言的优点,讲选择某写范式的权利留给语言使用者,这对于程序员来说,意味着自由。但是太大的自由往往意味着犯错,东西太广阔了,总有记不住的某些细节,譬如下面的代码
#include <iostream> using namespace std; class TestClass{ private: int data; public: TestClass(): data(0){} //explicit TestClass(int data): data(data){} int getData(){ return data; } }; int main(int argc, char *argv[]) { TestClass tc(10); tc = 11; cout<<tc.getData()<<endl; return 0; }
tc = 11;
这样的代码也能编译通过且赋值成功,真的很灵活。但是灵活的同时会造成程序的可读性变得很差,不加注意可能会产生某些莫名奇妙的bug;
其实我更加喜欢严格的有些偏执的代码,严格有些偏执的编译器,让程序员减少出错的机会。
幸好C++也考虑到了严格的禁止这种隐式类型转换,只要打开上述代码中的 //explicit 注释, 下面的直接赋值就会被编译器查出编译不过