艺术编程

死不惊人死不休

翻译 [翻译] Effective C++, 3rd Edition, Item 1: 将 C++ 视为语言的联合体收藏

Item 1: 将 C++ 视为 federation of languages(语言联合体)

作者:Scott Meyers

译者:fatalerror99 (iTePub's Nirvana)

发布:http://blog.csdn.net/fatalerror99/

最初,C++ 仅仅是在 C 的基础上附加了一些 object-oriented(面向对象)的特性。C++ 最初的名称—— "C with Classes" 就非常直观地表现了这一点。

作为一个语言的成熟过程,C++ 的成长大胆而充满冒险,它吸收的思想,特性,以至于编程策略与 C with Classes 越来越不同。exceptions(异常)要求不同的建构功能的途径(参见 Item 29),templates(模板)将设计思想提升到新的高度(参见 Item 41),而 STL 定义了一条前所未见的通向扩展性的道路。

今天的 C++ 已经成为一个 multiparadigm programming language(多范式的编程语言),一个囊括了 procedural(过程化),object-oriented(面向对象),functional(函数化),generic(泛型)以及 metaprogramming(元编程)特性的联合体。这些能力和弹性使 C++ 成为无可匹敌的工具,但也引起了一些混乱。所有的 "proper usage"(惯用法)规则似乎都有例外。我们该如何认识这样一个语言?

最简单的方法是不要将 C++ 视为一个单一的语言,而是一个亲族的语言的 federation(联合体)。在每一个特定的 sublanguage(子语言)中,它的特性趋向于直截了当,简单易记。但你从一个 sublanguage(子语言)转到另外一个,它的规则也许会发生变化。为了感受 C++,你必须将它的主要的 sublanguages(子语言)组织到一起。幸运的是,它只有 4 个:

  • C ——归根结底,C++ 依然是基于 C 的。blocks(模块),statements(语句),preprocessor(预处理器),built-in data types(内建数据类型),arrays(数组),pointers(指针)等等,全都来自于 C。在很多方面。C++ 提出了比相应的 C 版本更高级的解决问题的方法(例如,参见 Item 2(取代 preprocessor(预处理器))和 13(使用 objects(对象)管理 resources(资源))),但是,当你发现你自己工作在 C++ 的 C 部分时,effective programming(高效编程)的规则表现了 C 的诸多限制范围:没有 templates(模板),没有 exceptions(异常),没有 overloading(重载)等等。
  • Object-Oriented C++ —— C++ 的这部分就是 C with Classes 涉及到的全部:classes(类)(包括构造函数和析构函数),encapsulation(封装),inheritance(继承),polymorphism(多态),virtual functions (dynamic binding)(虚拟函数(动态绑定))等。C++ 的这一部分直接适用于 object-oriented design(面向对象设计)的经典规则。
  • Template C++ ——这是 C++ 的 generic programming(泛型编程)部分,大多数程序员对此都缺乏经验。template(模板)的考虑已遍及 C++,而且好的编程规则中包含特殊的 template-only(模板专用)条款已不再不同寻常(参见 Item 46 通过调用 template functions(模板函数)简化 type conversions(类型转换))。实际上,templates(模板)极为强大,它提供了一种全新的 programming paradigm(编程范式)—— template metaprogramming (TMP) (模板元编程)。Item 48 提供了一个 TMP 的概述,但是,除非你是一个 hard-core template junkie(死心塌地的模板瘾君子),否则你不需在此费心,TMP 的规则对主流的 C++ 编程少有影响。
  • STL —— STL 是一个 template library(模板库),但它一个非常特殊的 template library(模板库)。它将 containers(容器),iterators(迭代器),algorithms(算法)和 function objects(函数对象)非常优雅地整合在一起,但是。templates(模板)和 libraries(库)也可以围绕其它的想法建立起来。STL 有很多独特的处事方法,当你和 STL 一起工作,你需要遵循它的规则。

在头脑中保持这四种 sublanguages(子语言),当你从一种 sublanguage(子语言)转到另一种时,为了高效编程你需要改变你的策略,不要吃惊你遭遇到的情景。例如,使用 built-in(内建)(也就是说,C-like(类 C 的))类型时,pass-by-value(传值)通常比 pass-by-reference(传引用)更高效,但是当你从 C++ 的 C 部分转到 Object-Oriented C++(面向对象 C++),user-defined constructors(用户自定义构造函数)和 destructors(析构函数)意味着,通常情况下,更好的做法是 pass-by-reference-to-const(传 const 引用)。在 Template C++ 中工作时,这一点更加重要,因为,在这种情况下,你甚至不知道你的操作涉及到的 object(对象)的类型。然而,当你进入 STL,你知道 iterators(迭代器)和 function objects(函数对象)以 C 的 pointers(指针)为原型,对于 STL 中的 iterators(迭代器)和 function objects(函数对象),古老的 C 中的 pass-by-value(传值)规则又重新生效。(关于选择 parameter-passing(参数传递)方式的全部细节,参见 Item 20。)

C++ 不是使用一套规则的单一语言,而是 federation of four sublanguages(四种子语言的联合体),每一种都有各自的规则。在头脑中保持这些 sublanguages(子语言),你会发现对 C++ 的理解会容易得多。

Things to Remember

  • effective C++ programming(高效 C++ 编程)规则的变化,依赖于你使用 C++ 的哪一个部分。

发表于 @ 2005年06月27日 21:51:00|评论(loading...)

新一篇: [翻译] Effective C++, 3rd Edition, Item 2: 用 consts, enums 和 inlines 取代 #defines | 

用户操作
[即时聊天] [发私信] [加为好友]
fatalerror
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
fatalerror的公告
Copyleft © 2005 - 2009 by fatalerror99 (iTePub's Nirvana)

本 BLog 所有文章除注明转载者外,均为本人原创或翻译,欢迎转载。转载时请保持文章完整并注明出处。

强烈推荐使用 Mozilla Firefox 浏览本 BLog。

MSN: fatalerror9999@hotmail.com

e-mail: fatalerror99@gmail.com

文章分类
收藏
    My baby
    我家未未(RSS)
    Our Projects
    boost 文档汉化 boost_doc_translation(RSS)
    不服不行
    Bjarne Stroustrup
    Alexander A. Stepanov
    Andrei Alexandrescu
    Bruce Eckel
    Charles Petzold
    Chris Sells
    David R. Musser
    Dennis M. Ritchie
    Donald E. Knuth
    Herb Sutter
    James Gosling
    Nicolai M. Josuttis
    Scott Meyers
    Stanley B. Lippman
    侯捷
    荣耀
    精点 BLog
    水瓶水蓝
    水瓶水蓝 —— 晃荡在阴阳两界的魂儿
    (RSS)
    CityLife 的流水账(RSS)
    为艺术而技术(RSS)
    乱发当风(RSS)
    微起涟漪 —— basse(RSS)
    暗金色月亮的赫拉迪克宝盒(RSS)
    杏坛雨的博客(RSS)
    王晓渔:书中自有……(RSS)
    开发 BLog
    C++ 的罗浮宫(RSS)
    Coofucoo's Blog--The Unadulterated Coofucoo(RSS)
    GreenCode's Blog(RSS)
    ilovevc 的专栏(RSS)
    Jeffrey Richter's Blog(RSS)
    lxwde 的专栏(RSS)
    oiramario(RSS)
    Ralph Zhang --- 在这里我只谈技术(RSS)
    ralph623 的专栏(RSS)
    renco 的专栏(RSS)
    Scorpio Auding @ Blog++(RSS)
    SnowFalcon 的专栏(RSS)
    Stan Lippman's BLog(RSS)
    Sutter's (Online) Mill(RSS)
    切尔斯基(RSS)
    刘未鹏 Mind Hacks
    周星星 之 Blog(RSS)
    孟岩(RSS)
    开心就好的代码人生(RSS)
    心如止水 —— coofucoo 的专栏(RSS)
    方舟(RSS)
    歌谣在风中飘舞(RSS)
    相信开源的力量(RSS)
    空谷幽兰,心如皓月 —— 陈皓专栏(RSS)
    艺术编程(RSS)
    透明思考 - 1(RSS)
    透明思考 - 2(RSS)
    陈硕的 Blog(RSS)
    开发网站
    CSDN.NET
    artima devdloper: Best practices in enterprise software development
    Experts Exchange
    IBM DeveloperWorks
    IBM DeveloperWorks 中国(RSS)
    Programmers' Heaven
    The Artima Developer Community
    The Code Project
    卡卡社区
    开发语言与环境
    (CHEZ (CHEZ SCHEME))
    .NET Languages
    PHP: Hypertext Preprocessor
    Eclipse.org home
    Python Programming Language
    REBOL Technologies
    ActiveState
    D Programming Language
    Eclipse Plugins
    Eclipse Plusin Central
    Eiffel Software
    GCL - GNU Common Lisp
    GNU Compiler Collection (GCC)
    Groovy
    IronPython
    NetBeans IDE
    Perl
    Ruby on Rails
    Ruby Programming Language
    The Programming Language Lua
    坛子若干
    iTePub
    自由小店 —— iTePub 共建共享电子图书交互平台
    (RSS)
    ChinaJavaWorld.com 技术论坛
    ChinaUnix
    CSDN 技术社区 —— 这个不说大家也知道
    Huihoo - Open Source Community
    ITPUB 论坛
    卡卡社区
    网络书店
    Amazon.com
    China-Pub 网上书店
    joyo Amazon 卓越亚马逊
    第二书店
    有一杯咖啡叫做 Java
    Hibernate
    Java Technology
    JavaWorld
    jGuru
    Spring Framework
    The Apache Software Foundation
    TheServerSide.COM: Your Enterprise Java Community
    有一部经典叫做 C++
    Boost C++ Libraries
    C Programming and C++ Programming
    C/C++ Reference
    cplusplus.com
    Programming in C++, Rules and Recommendations
    The ADAPTIVE Communication Enviroment (ACE)
    The C Standards Committee (ISO C)
    The C++ Standard Committee (ISO C++)
    有一只企鹅叫做 Linux
    Debian
    Fedora Project
    Linux Journal
    Linux Online!
    Linux 伊甸园
    Linux.com
    Red Hat
    SUSE Linux Enterprise from Novell
    The Linux Foundation
    The Linux Kernel Archives
    Ubuntu
    有一种自由叫做开源
    OpenBSD
    CodeGuru
    FreeBSD
    FSF - The Free Software Foundation
    GNU
    Huihoo - Open Source Community
    Open Source Initiative (OSI)
    OpenSolaris
    SourceForge.net
    The Open Enterprise Foundation (OEF)
    专业出版机构
    Addison-Wesley
    APress
    Manning Publications Co.
    McGraw-Hill
    O'Reilly
    Prentice Hall PTR
    Wiley
    Wordware Publishing, Inc.
    Wrox
    存档
    软件项目交易
    Csdn Blog version 3.1a
    Copyright © fatalerror