c++


c++
开放分类: 编程语言、比力争论机、程序设计、cpp、c plus plus
c++  - ChangeDeng - Change
目录
  • ? 【概述】
  • ? 【子语言】
  • ? 【语言发展】
  • ? 【C++的设计原则】
  • ? 【C++的Hello World程序】
  • ? 【C++程序员的数量】
  • ? 【C++语言的运用】
  • ? 【C++编程技巧】
  • ? 【C++的集成开发情况】
  • ? 【C++的集成开发情况】
  • c++  - ChangeDeng - Change


【概述】
[编辑本段]
C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种运用非常广泛的比力争论机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年月初期创造并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 14882-1998。C++是具有国际标准的编程语言,通常称作 ANSI/ISO C++。1998年是C++标准委员会建立的第一年,以后每5年视实践需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。遗憾的是,由于C++语言过于庞大,以及他经历了长年的演变,直到目下当今(2004年)只有少数几个编译器完全符合这个标准(这么说也是不完全正确的,究竟上,至今为止没有任何一款编译器完全支持ISO C++)。

另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依靠C语言,我们可以完全不学C语言,而直接学习C++。凭据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效力往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言(然而我们在单片机等需要隆重利用空间、直接操作硬件的地方还是要运用C语言)。



【子语言】
[编辑本段]
凭据Effective C++第三版第一条款的描述,目下当今C++由以下四个“子语言”组成:

1、C子语言。C++支持C语言的几乎局部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C++标准文献)。
2、面向对象的C++。C++首先作为一门面向对象的语言而著名,这个特点在这里不再详述。
3、泛型编程语言。C++强大(但容易失控的)模板功能使它能在编译期完成很多工作,从而大大进步运行期效力。
4、STL(C++标准模板库)。随着STL的不断发展,它已经逐渐成为C++程序设计中弗成或缺的部分,其效力能够比一般的naive代码低些,但是其宁静性与规范性使它大受欢迎。




【语言发展】
[编辑本段]
C++语言发展或者可以分为三个阶段: 第一阶段从80年月到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,而且凭借着接近C语言的效力,在工业界运用的开发语言中占据了相当大份额; 第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击; 第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的发生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最庞大的一员。



【C++的设计原则】
[编辑本段]

? C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。
? C++设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。
? C++设计成给程序设计者更多的选择,即使能够导致程序设计者选择错误。
? C++设计成尽能够与C兼容,籍此提供一个从C到C++的平滑过渡。
? C++避免平台限定或没有普遍用途的特性。
? C++不运用会带来额外开销的特性。
? C++设计成无需庞大的程序设计情况。

出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。闭于此类话题,C++之父的《C++语言的设计和演化》 里做了详尽的陈述。

【C++的Hello World程序】
[编辑本段]


在运用兼容C89标准(也称为ANSI C)的编译器时,下面这个程序显现“Hello, world!”然后结束运行:
(究竟上这并不是符合98标准[ISO C++]的C++程序,而且在多数编译器上这个程序也不能运行,若要在比较旧的编译器上编译该程序,应将iostream改为iostream.h)
#include <iostream>
int main()
{
printf("Hello, world!\n");
return 0;
}
在运用兼容C++99标准(ISO/IEC 14882-1998)的编译器时,下面的程序也是可以的:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
凭据ISO C++的规定,main函数的形式只能是
int main(void)
{
...
}

以及

int main(int argc,char * argv[])
{
...
}
尽管如此,但在大部份(其实是在Windows平台下的大部分,主要是VC系列编译器)编译器上,
void main()
{
...
}
也被支持,但这并不正确,也不标准。这样的写法会使程序代码丧失跨平台的特性。



【C++程序员的数量】
[编辑本段]


分析机构EvansData定期对开发人员展开查询拜访,其查询拜访结果与Stroustrup提出的C++正在扩张的说法相违背。EvansData的数据显现,以C++为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年春的46%。

Forrester最新的查询拜访显现,C++、微软VisualBasic和Java是众多公司产品体系的首选语言。对100家公司的查询拜访显现,C/C++、VisualBasic和Java在产品体系中的运用比例分别是59%、61%和66%。

传统上认为,C++相对于目前一些新潮的语言,如Java、C#,劣势在于程序的运行性能。这种观念并不完全。如果一小我私家深信这一点,那么说明他并没有充分了解和理解C++和那个某某语言。同时,持有这种观念的人,通常也是受到了某种误导(罪魁福首当然就是那些财大气粗的公司)。对于这些公司而言,他们埋没了C++同某某语言间的核心差别,而把目下当今多数程序员不太闭心的差别,也就是性能,加以强化。因为随着CPU性能的快速提升,性能问题已不为人们所闭心。这叫“李代桃僵”。很多涉世不深的程序员,也就相信了他们。于是,大公司们的阴谋也就得逞了。

一般认为,运用Java或C#的开发成本比C++低。但是,如果你能够充分分析C++和这些语言的差别,会发现这句话的建立是有前提的。这个前提就是:软件规模和庞大度都比较小。如果不超过3万行有效代码(不包括生成器发生的代码),这句话基本上还能建立。否则,随着代码量和庞大度的增加,C++的劣势将会越来越显著。造成这种差别的就是C++的软件工程性。在Java和C#大谈软件工程的时候,C++实践上已经悄悄地将软件工程性提升到一个亘古未有的高度。这一点被多数人忽视,而且被大公司竭力掩盖。

语言在软件工程上的好坏,依靠于语言的抽象能力。从面向过程到面向对象,语言的抽象能力有了一个质的飞跃。但在实践中,人们发现面向对象无法解决所有软件工程中的问题。于是,精英们逐步引入、并拓展泛型编程,解决更高层次的软件工程问题。(实践上,面向对象和泛型编程的起源都可以追溯到1967年,但由于泛型编程更抽象,所以运用远远落后于面向对象)。



【C++语言的运用】
[编辑本段]


哪些程序是用C++写的:
主流的3种操作体系Windows,Linux,Unix,内核都是用C语言和汇编写的,上层高级特性是用C++写的。
《魔兽世界》等几乎所有的网络游戏,百度搜索引擎(Baidu.com),我们所用的大多数软件都是用C++写的(硬件也有很多用到C++的)。

C++之父Bjarne Stroustrup列举的C++运用:
Amazon.com:Software for large-scale e-commerce
Apple: OS X is written in a mix of language, but a few important parts are C++. The two most interesting are
AT&T:The largest US telecommunications provider.
o provisioning systems
o systems for rapid network recovery after failure
Autodesk: A large number of major number of application in the CAD domain
Ericsson:o server platform.
o TDMA-CDMA HLR
o GSM-TDMA-CDMA mobility gateway
Google: web search engine, etc。
HP: Here is a tiny fraction of HP's C++ apps:
o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code).
IBM: o OS/400.
o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors.
Intel:o Vtune performace analysis software
o compilers and optimizers
o lots of chip design and manufacturing software
JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software "on the ground" (i.e. Earth).
Microsoft:o Windows XP
o Windows NT (NT4 and 2000)
o Windows 9x (95, 98, Me)
o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook)
o Internet Explorer (including Outlook Express)
o Visual Studio
o SQL
Mozilla: Firefox browser and Thunderbird mail client (open source)
MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world's most popular open source database
Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node).
o MSC/HLR
Sun: o The HotSpot Java Virtual Machine is written in C++
Symbian OS: rationale: "[...] using C++ for all system code, from the kernel upwards." This is one of the most widespread OS's for cellular phones
KDE from linux is written in C++.
telephone systems: I think it would be almost easier to list the systems which aren't written in C++

【C++编程技巧】
[编辑本段]

 1、运用new和delete进行动态内存分配和释放
  运算符new和delete是C++新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。运用new较之运用malloc()有以下的几个优点:
  (1)new自动比力争论要分配类型的大小,不运用sizeof运算符,比较省事,可以避免错误。
  (2)自动地返回正确的指针类型,不用进行强制指针类型转换。
  (3)可以用new对分配的对象进行初始化。
  运用例子:
  (1)int* p;
    p=new int[10]; //分配一个含有10个整数的整形数组
    delete[] p; //删除这个数组
  (2)int* p;
    p=new int (100);//动态分配一个整数并初始化
  二、运用inline内连函数替代宏调用
  对于频繁运用的函数,C语言建议运用宏调用取代函数调用以加快代码执行,减少调用开销。但是宏调用有很多的弊端,能够引发不期望的副作用。例如宏:#define abs(a) ((a)<0?(-a):(a)), 当运用abs(i++)时,这个宏就会出错。
  所以在C++中应该运用inline内连函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。
  运用内连函数只须把inline闭键字放在函数返回类型的前面。例如:
inline int Add(int a,int b);//声明Add()为内连函数
  这样编译器在碰到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。
  三、运用函数重载
  在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C++中,函数名相同而参数数据类型不同的两个函数被注释为重载。例如:
void PutHz(char* str);//在当前位置输出汉字
void PutHz(int x,int y,char * str);//在x,y处输出汉字
  运用函数重载可以帮助程序员处理更多的庞大问题,避免了运用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于办理和运用,而不必绞尽脑汁地去向理函数名。同时必须留意,参数数据类型相同,但是函数返回类型不同的两个函数不能重载。
  四、运用引用(reference)取代指针进行参数传递
  在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如:
   void Add(int *a)
{
*a++;
}
调用时则运用
Add(&x); //其中x为int或可以转化为int的类型,如unsigned int, 但这时候候编译器通过回给出warning

  对于庞大的程序,运用指针容易出错,程序也难以读懂。在C++中,对于上述情况 可以运用引用来取代指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如运用引用的函数定义为:
  void Add(int& a)
  {
   a++;  //a为一个整数的引用
  }
调用时运用
  Add(x);   //其中x为int

  这个函数与运用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。
五、运用缺省参数
  在C++中函数可以运用缺省参数,例如:
void PutHzxy(char *str,int x=-1, int y=-1)
{
if(x==-1)
x=wherex();
if(y==-1)
x=wherex();
moveto(x,y);
PutHx(str);
}
  可以有三种方式调用函数PutHzxy(),例如:
PutHzxy("C++语言");//运用缺省参数在当前位置输出
PutHzxy("C++语言",10,10);//没有运用缺省参数
PutHzxy("C++语言",10);//对y运用缺省参数,指定x的位置

  通常的情况下,一个函数应该具有尽能够大的灵活性。运用缺省参数为程序员处理更大的庞大性和灵活性问题提供了有效的方法,所以在C++的代码中都大量地运用了缺省参数。
  需要说明的是,所有的缺省参数必须出目下当今不缺省参数的右边。亦即,一旦开始定义缺省参数,就弗成再说明非缺省的参数。
  例如: 
void PutHzxy(char*str,int x=-1,int y=-1)//正确
void PutHzxy(int x=-1,int y=-1,char*str)//错误

  六、运用STL
STL(Standard Template Library,标准模板库), STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),并包括一些工具类如auto_ptr。几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

#include<vector>// 包含相闭的头文件/
typedef std::vector<int> intvector;//运用typedef 使代码看起来更简洁

int main()
{
intvector vi;
for(int i=0;i<10,i++)
vi.push_back(i);//运用push_back添加元素
for(int i=0;i<vi.size();i++)
std::cout<<vi[ i]<<" ";//[]操作符被重载,使得我们可以像访问数组一样访问vector中的元素
}


【C++的集成开发情况】
[编辑本段]

1.visual C++
2.visual studio
3.Borland C++
4.C++ Builder
5.eclipse(CDT)
6.Dev-C++
7.Gcc

特注:Microsoft Visual C++并不严酷遵守标准C++标准,在很多方面,与标准C++标准相左(不过在VC8、VC9版本中对C++标准的支持还是有很大的进步的)。比如,标准C++规定,过程内的变量生存期仅是该过程。但是,在VC++中,
for(int i=0;i<7;i++){
//......
}
这样的语句后,i仍然是认为已经声明过。
完全符合标准C++标准的是BCB(Borland C Builder),GCC等开发情况。

【C++著作】
《The C++ Standard Library: A Tutorial and
Reference》原文版
中文版:《C++标准程序库:自修教程与参考手册》
这是一本百科全书式的C++标准库著作,是一本需要频频查阅的参考大全。它在完备性、细致性以及精确性方面都是无与伦比的。本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不只仅是STL。正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册。
浅显易懂的写作风格使得这本书非常易读。如果你进展学习标准库的用法并尽能够地发挥其潜能,那你必须拥有这本书。正如网络上所言,这本书不只仅应该摆在你的书橱中,更应该放到你的电脑桌上。我向每一位职业C++程序员强烈推荐。
《Standard C++ IOStreams and Locales: Advanced
Programmer's Guide and Reference》原文版
中文版《标准C++输入输出流与本地化》
C++标准库由STL、流和本地化三部分构成。闭于STL的书市面上已经有不少,但罕见流和本地化方面的专著。本书是这两个领域中最优秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本地化。如果你不满足于停留在“会用”流库的层面,千万不要错过它。
2001年夏天,我草草翻阅过这本书的中文版,从内容到包装都给我留下了比较深刻的印象——不过负面的居多一些。2003年春天,无意中得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。
《Effective STL》影印版、中文版
读完Scott 的《Effective C++》和《More Effective
C++》的中译本之后,我一直期待这本书的中文版。我从潘爱民先生的小我私家主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见。荣幸的是,我们可以看到它的原版。
本书是运用STL的程序员必读之作。在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式运用它们。和Scott的其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。看过这本书以后,我想你也许会和我以及其他C++程序员一样发生这样的想法:Scott什么时候会写出一本“More
Effective STL”?
《Generic Programming and the STL: Using and Extending the C++
Standard Template Library》影印版、中文版《泛型编程与STL》
闭于STL,我还提醒你留心Matthew H. Austern的《Generic Programming and the STL: Using and
Extending the C++ Standard Template
Library》(《泛型编程与STL》,中国电力出版社)。这本书散发着浓厚的学院气息。Andrew Koenig和Barbara
Moo在《Accelerated C++: Practical Programming by
Example》一书末尾郑重推荐另外两本进阶好书(除了他们自己的《Ruminations on C++》外),其中一本是TCPL,另外一本就是本书!
网络编程
在网络编程时代,C++应该扮演着怎样的角色,让ACE(Adaptive Communications Environment)来告诉你。
Douglas C. Schmidt, Stephen D. Huston,《C++ Network Programming》Volume 1:
Mastering Complexity with ACE and Patterns、Volume 2: Systematic Reuse with ACE
and Frameworks
中文版:,《C++网络编程》卷1:运用ACE和模式消除庞大性、卷2:基于 ACE 和框架的体系化复用
采用C++进行企业级网络编程,目前ACE(以及这两本书)是一个值得考虑的选择。ACE是一个面向对象、跨平台、开放源码的网络编程框架,目标在于构建高性能网络运用和中间件。Douglas是ACE的开创人,Stephen则已为ACE提供了数年的技术支持和顾问服务,两位都是ACE社群(是的,ACE的影响和实践运用的程度已经形成了一个社群)的专家。
ACE并不单单被大学和研究所追捧,它已经被成功地运用于世界上成千上万个商业运用中。在电信、宇航、医药和财经领域的网络体系中,ACE已经并继续发挥着重要的作用。如果你准备开发高性能通讯体系,你应该考虑考虑这一汇集世界顶尖专家聪慧的成果。
除了运用C++面向对象设计技术和模板等高级语言特性外,ACE还运用了大量的模式。《C++网络编程》卷1和卷2并不只仅教你闭于ACE的方方面面,它还会教给你模式和通用框架设计等高级技术等。所以,作为一名中、高级C++程序员,即使你很少进行正儿八经的C++网络程序设计,阅读这两本书同样可以从中受益。
是的,并非所有网络运用都要运用Web服务器(以及其他运用服务器)和重量级组件模型,换个思绪,它们或许也可以从轻量级的ACE组件中获益。
杂项
以下几本书所以被列入“杂项”单元,是因为我没有考虑到符合的归类方法,它们和上面的书籍一样,值得一读。
Bruce Eckel,《Thinking in C++》影印版二版、三版(又名卷二)
中文《C++编程思想》二版、卷一:标准C++导引 卷二:实用编程技术
《Thinking in
C++》的第1版于1996年荣获“软件研发”杂志评选的图书震撼大奖。最新推出的第2版对内容进行了大幅美团网改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实践成果。“输入输入流”、“多重继承”、“异常处理”和“运行时类型识别”等高级主题连同C++标准化以后增加的一些内容则被放入第二卷中。Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些“玩票”的技术人员写的器材更能吸引读者。究竟上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和《C++
Primer》。顺带一提,访问作者的站点,你可以先睹第二卷的风采。
Andrew Koenig, Barbara E. Moo,,《Ruminations on C++: A Decade of Programming
Insight and Experience》原版、中文版《C++沉思录》
Andrew是世界上寥寥可数的C++专家。这是一本闭于C++编程思想和程序设计技术而非语言细节的著作。如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案。整本书技术表达透彻,文字通俗易懂。Bjarne这样评价这本书:本书遍布“C++是什么、C++能够做什么”的真知灼见。
Stanley B. Lippman,《Inside The C++ Object Model》影印版、中文版《深度探索C++对象模型》
从编译器的角度考察C++可以使你知其然并知其所以然。本书探讨了大量的C++面向对象程序设计的底层运作机制,包括机闭函数、函数、且则对象、继承、虚拟、模板的实例化、异常处理、运行期类型识别等,另外还介绍了一些在实现C++对象模型过程中做出的权衡折衷。喜欢刨根问底的C++程序员不要错过这本书。
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns:
Elements of Reusable Object-Oriented software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,《Design Patterns:
Elements of Reusable Object-Oriented software》影印版、中文版《设计模式:可复用面向对象软件的基础》
设计可复用的面向对象的软件,你需要掌握设计模式。本书并非专为C++程序员而写,但它采用了C++(以及Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益。四位作者都是国际公认的面向对象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记实下来。这本书影响是如此深远,以至于四位作者以及本书都被昵称为GoF(Gang
of
Four)。本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。学习设计模式,这本书需要一而再、再而三的咀嚼。顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁。
John Lakos,《Large-Scale C++ Software Design》中文版《大规模C++程序设计》、候捷:《STL 源码剖析》
还有一些C++好书值得一读,恕此处无法一一列出。例如John Lakos的著作《Large-Scale C++ Software
Design》(《大规模C++程序设计》,中国电力出版社)和侯捷先生的《STL 源码剖析》(华中科技大学出版社)等。
《STL
源码剖析》是一本很有特色的书,但我认为它还可以更好。我小我私家期待侯捷先生自第一版发行以来经过对模板技术的沉淀和再思考之后,再写一本剖析得更深入、更透彻而且更全面的“第二版”。遗憾的是,侯捷先生在完成《C++
Templates: The Complete Guide》一书的翻译后似乎决定暂时离别模板、泛型编程和STL领域。
运用C++成功开发大规模软件体系,不只需要很好地理解大多数C++书籍中讲述的逻辑设计问题,更需要掌握《大规模C++程序设计》中讲述的物理设计技术。当然,这本书的确有点过时了,不过,如果你的精力和金钱都比较宽绰,买一本看看并无坏处。
至此,我想有必要声明一下,有一些(好)书没有得到推荐,主要原因如下:
以上这些书已经足够多、足够好了。
我不会推荐通过正常渠道很难购买到的书籍 ——不论是中文版还是英文版。
作(译)者名气大小不影响我的推荐。我们是在看书,不是看人。
我不会推荐我从来没有看过的书。我至少要看过其中的某个版本(包括电子档)。这个“看”,一般指“认真阅读”,不过有一些也只能算是“欣赏”。
结语
作为一名普通技术写译者,我深知技术创作和翻译的艰辛(和欢快),并多多少少了解一些有闭技术书籍创作、翻译、制作、出版以及市场推介背后的细节。本日,我不会再对一本看上去差强人意的图书信口开河。罗列同一本书的各种版本的用意只在于为你多提供一些信息,让你多一种选择。
在本文成文的后期,我给Bjarne写了一封信,请教如果他来写这篇文章会怎么写。他给了我简明扼要的建议。在肯定以上列出的绝大部分图书都是世界顶尖水平的C++著作的同时,Bjarne提醒我别忘了向专家级程序员推荐《The
C++ Standard : Incorporating Technical Corrigendum No. 1》
《The C++ Standard : Incorporating Technical Corrigendum No. 1》
Bjarne还友好地提醒我,在我的推荐列表中没有哪一本有助于C++程序员进行Windows编程——这恰是我的本意。在这篇文章中,我只推荐、点评平台中立的C++著作(网络编程除外)——和操作体系无闭,和集成开发情况无闭,我甚至幻想它们和编译器也无闭。你可以凭据业务开发需要,选读自己喜爱的领域相闭的C++书籍。
说到“体系无闭、平台中立”,我忍不住想起了“抽象层”的概念。开发实践运用的C++程序员通常工作于特定操作体系、特定开发情况和特定业务领域之中,而对标准C++和C++标准库扎实而深刻的把握,无疑是你得以在不同的操作体系、不同的开发情况以及不同的业务领域之间纵横驰骋的“抽象”本钱。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页