内容摘要:最近写了一篇关于C++0x Concepts的文章,意料之外地引起了一场小规模口水仗。回各位帖子的同时,回想这些年C++社群的大小争论,觉得有必要把一些长久以来在C++争论中出现的误解列举出来。
再举个实例,有同学说,我只要写简单的代码。问题是,简单不意味着单纯。简单意味着在更高抽象层次上面编程,后者是要靠好的库抽象才能达到的。借用《Extended STL》里面的一个例子:
DIR* dir = opendir(".");
if(NULL != dir){
struct dirent* de;
for(; NULL != (de = readdir(dir)); )
{
struct stat st;
if( 0 == stat(de->d_name, &st) && S_IFREG == (st.st_mode &S_IFMT)) {
remove(de->d_name);
}
}
closedir(dir);} 这段代码删除当前目录中所有文件。
readdir_sequence entries(".", readdir_sequence::files);
std::for_each(entries.begin(), entries.end(), ::remove); 这段代码做同样的事情——哪个更简单?那问题是,为什么发展到后来,“钻语言细节”成了社群的潜在哲学呢? 这其实是一个心理学上的问题,跟语言没有关系,跟C++的初衷更没有关系。从心理上,在同一个领域,如果另一个人比你懂得更多,你就会倾向于佩服他,这时另一个人懂的东西有多大的用处其实并不那么重要,人对自己不懂的东西总是有一种敬畏感的。
C++里面有那么多的tricks,其实日常编程中要用到的trick少之又少,日常编程绝大多数都以复用库为主,而那些tricks就隐藏在库里面。除非你是库的设计者,否则很多的tricks根本就无需关注。
另一方面,写作C++书籍的大多数都是C++库的设计者,这就给予了许多C++书一个有偏见的视角,大量库设计中才会用到的技术被介绍出来,而社群对这些牛人又都是唯马首是瞻的。(其实我觉得一本Bjarne的《The C++ Programming Language》加上一本Herb&Alexandrescu的《C++ Coding Standard》对于日常程序员来说,真的足够了。)
来源:天极 作者:刘未鹏 责编:豆豆技术应用
正在加载评论...