神话与谬误:争论C++前你应当知道什么

豆豆网   技术应用频道   2007年08月11日  【字号: 收藏本文

内容摘要:最近写了一篇关于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》对于日常程序员来说,真的足够了。)

来源:天极    作者:刘未鹏    责编:豆豆技术应用

正在加载评论...