博文

[转] C++ 热点问题一席谈(2007-06-26 09:49:00)

摘要: [转] C++ 热点问题一席谈

来源:荣耀/刘未鹏 译 作者:Bjarne Stroustrup C++热点问题一席谈
—      Bjarne Stroustrup 2005新春专访 荣耀 访  荣耀/刘未鹏 译 荣耀: Herb Sutter和Stan Lippman目前正在微软主持C++/CLI的设计工作,意图将动态的、基于组件的.NET编程模型和ISO C++集成在一起。您对此有何评价?您认为C++需要.NET吗?您认为C++/CLI会取得成功吗?  Bjarne: 不,C++根本不需要.NET,C++只需要最小限度的运行时支持,用于new/delete、异常处理以及RTTI等,而且仅当你使用这些特性时才需要。C++程序通常可以使用每一分可用的资源,在硬件上直接跑。C++的这些能力使其非常适合于系统级编程以及嵌入式系统任务。当然,也有些C++应用需要.NET,比如那些为了和微软.NET框架和服务紧密集成而专门设计的应用。然而,C++语言和标准库的宗旨是远离这些平台相关性的纠缠。另一方面,许多.NET设施都依赖于C++,因为除了C++之外,再也找不到更通用、更高效的语言来很好地完成这个任务,从这个意义上说,.NET需要C++。  从“很多人将会使用它”这个意义上来说,C++/CLI是会成功的。使用.NET CLI,开发者选择甚少,而C++则是最佳选择之一,而且很明显在Windows上也是,因为微软给予C++最好的支持。话虽如此,我仍然倾向于在设计系统时保持良好的移植性,而将对平台相关或专有特性的使用限制在特定的代码块中,并使用以ISO标准C++所表达的接口去访问它们。  荣耀: 尽管我现在相信这是一个毫无意义的问题,不过我想我最好还是澄清一下。当我说“C++需要.NET吗?”,我的意思是想问“我们需要.NET来使C++更普及吗?”。这就好比问“世界和平需要美国吗?”,或者,“我们需要美国来维护世界和平吗?”。当然了,我们都不喜欢讨论政治性话题,也许这个比方很不合适。  Bjarne: 政治关乎可行性。从这个意义上来说,我们必须考虑政治,而你的问题当然也是合理的。鉴于微软在软件领域的地位以及它对.......

阅读全文(3126) | 评论:0

C 语言编程常见错误 二(2007-06-26 09:46:00)

摘要: C 语言编程常见错误 2

来源:网络收集 作者:不详
1. = 不等于 ==     从 Algol 派生出来的语言,如 Pascal 和 Ada,用 := 表示赋值而用 = 表示比较。而 C 语言则是用 = 表示赋值而用 == 表示比较。这是因为赋值的频率要高于比较,因此为其分配更短的符号。此外,C 可以多重赋值(如 a = b = c),并且可以将赋值嵌入到一个大的表达式或者语句中。这种便捷导致了一个潜在的问题:需要用比较的地方却写成了赋值。下面的语句看起来好像是要检查 x 是否等于 y :
        if ( x = y )
            foo();
而实际上是将 y 的值赋值给 x ,并检查结果是否非零。再看看下面的一个希望跳过空格、制表符和换行符的循环:
        while ( c == ' ' || c = '\t' || c == '\n' )
            c = getc(f);
在应该与 '\t' 进行比较的地方程序员错误地使用了 =,而不是==。这个“比较”实际上是将'\t' 赋给 c,然后判断 c 的(新的)值是否为零。因为 '\t' 不为零,所以这个“比较”一直为真,因此这是一个死循环。
    一些编译器会对形如 e1 = e2 的条件给出一个警告以提醒用户。当你确实需要对一个变量进行赋值,然后再检查变量是否“非零”时,为了避免这种警告信息,应显式给出比较符。也就是将:
        if ( x = y )
       &nbs......

阅读全文(3293) | 评论:0

C 语言编程常见错误 一(2007-06-26 09:44:00)

摘要:C 语言编程常见错误 1

1. 书写标识符时,忽略了大小写字母的区别。
       int main( void )
       {
           int a = 5;
           printf( "%d", A );            return 0;
       }
编译器认为 a 和 A 是两个不同的变量名,而显示出错信息。C 语言规定大写字母和小写字母是不同的字符;而有些编程语言是不分大小写的。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2. 忽略了变量的类型,进行了不合法的运算。
       int main( void )
       {
           float a, b;
           printf( "%d", a % b );            return 0;
       }
% 是求余运算符,a % b 的结果是 a 除以 b 的余数。只有 % 左右两边的操作数都是整型时,才可以进行求余运算。故而上面的程序是错误的,因为 a......

阅读全文(3310) | 评论:1

C++名人的网站(2007-05-19 13:12:00)

摘要:正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴,下面的人物我们认为没有介绍的必要,只因下面的人物在C++领域的地位众所周知,我们只将相关的资源进行罗列以供读者学习,他们有的工作于贝尔实验室,有的工作于知名编译器厂商,有的在不断推进语言的标准化,有的为读者撰写了多部千古奇作…… 1、Bjarne Stroustrup http://www.research.att.com/~bs/ 2、Stanley B. Lippman http://blogs.msdn.com/slippman/ (中文版) http://www.zengyihome.net/slippman/index.htm 3、Scott Meyers http://www.aristeia.com/ 4、David Musser http://www.cs.rpi.edu/~musser/ 5、Bruce Eckel http://www.bruceeckel.com http://blog.csdn.net/beckel Bruce Eckel 博客中文版 6、Nicolai M. Josuttis http://www.josuttis.com/ 7、Herb Sutter http://www.gotw.ca/ http://blog.csdn.net/hsutter/ Herb Sutter 中文博客 8、Andrei Alexandrescu http://www.moderncppdesign.com......

阅读全文(2690) | 评论:0

C++的学习感想(2007-05-19 12:53:00)

摘要:C++的学习感想 作者:robindy 来源:小狼博客  IT人   很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后还是得回过头来学习C++语言本身。
   学一个月,可以用VC写一些小程序自己玩玩
  学两个月,可以用VC写像样点的东西在周围人面前炫炫
  学三个月,可以用VC给老板开始干活了
  学六个月,开始重头去学C++
  学一年后,决定要不要继续,if(继续) 学习MFC、ATL、STL、C#、BCB、Network、Databa
se、Algorithm... else 开始就是个错误
  学三年后,学会怎么来用编程语言来解决问题,VC、BCB等都只是解决问题的工具。这时候你如果还在学C++,你可以从事软件开发这个很有“前途”的职业了。
 很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后
还是得回过头来学习C++语言本身。 那么学习C++从何处入手了?
C++语言相对于C语言来说引入了两个大的新东西,一个就是面向对象(具体来将就是类
),另外就是模板技术(模板编程或者叫泛型编程是进来非常流行的技术,在C#中虽然还
没有对泛型编程的支持,但是相信在将来也一定会加入这一功能),模板是C++中比较复
杂的部分,但是作为一个真正的C++程序员,这部分很重要。尤其是对C++标准程序库
的掌握尤为重要。
刚开始的时候千万不要直扑VC中的各种向导和设计器。因为依赖开发环境生成的很多代码
会把我们搞糊涂,也不利于我们学习C++语言本身。我的建议就是生成一个空的控制台工
程,然后自己向里面添加文件。
如下就是一个简单的控制台程序:
//robindy/list.cpp #include <iostream>
#include <list> using namespace std; int main()
{
list<char> coll; for(char c = 'a'; c <= 'z'; ++c)
{
coll.push_back(c);
} list::cons......

阅读全文(3855) | 评论:4

骇人听闻的 CSP [转](2007-05-11 21:27:00)

摘要:  骇人听闻的 CSP [转]

                           来源:雨下桐梧     今天有点空,研究了一下CSP,有一点不大不小的收获,现在拿出来献一下丑。用个有点搞噱头的标题是因为在网上原来有就这么一篇文章,借个标题聚点人气,呵呵。而我即将要介绍的东西,的确是比较有创意的,并且文章有一段话是引用里面的,所以用一下这个标题也不足为过吧,言归正传,下面开始。     Hmm...What is CSP?     咳.....关于CSP的概念和背景,我实在懒得写了,请允许我摘录一段: ---------------------------------------------------------------------------     这个CSP不是CSP(Commercial Service Provider)即商业服务提供商,CSP不是Client/Server Program,也不是Chinese Super Programer,更不是CS Player,那么什么是CSP呢?在说明什么是CSP之前,先说明什么是“骇人听闻”,一说到“骇人听闻”,你可能就想到了是什么坏事吧,其实不一定,应该说就是前所未闻的事说严重一点就是“骇人听闻”了。在每一本关于asp, php, jsp, asp.net书上都告诉你,做网站不可能使用C++,真的吗?这个CSP偏偏就是C++ Server Pages的简称,和asp、jsp类似,属于一种Web应用扩充的脚本语言,可以用来编写网页代码。其对应的文件名是".CSP"。 (下面的文字部分来源于《CSP开发者手册》)     CSP使用C++语言作为脚本的语言,和asp、jsp、php等不同的是,CSP不是解释执行的脚本,而是真正编译后执行的......

阅读全文(3312) | 评论:2

C/C++术语中英对照 [转](2007-05-11 21:24:00)

摘要: 以下是侯捷个人收集到的 C/C++ 编程方面的术语对照。请大陆朋友给我一些意见,尤其是标示 '?' 之栏位。谢谢。
两岸朋友,如果您想到哪些术语尚未列入本表,请提示我,谢谢。
新书写作时,我会以此表为叁考。

●英中繁简编程术语对照

英文                    台湾惯用术语                            大陆惯用术语
---------------------------------------------------------------------------------------
abstract                抽象的                                  抽象的
abstraction             抽象体、抽象物、抽象性       &......

阅读全文(4899) | 评论:0

2007 年年初关于 C++ 的会谈[转](2007-05-11 21:16:00)

摘要:  2 月 21 号:Google(于加州 Mountainview 地区):“C++0x 中的初始化”。 3 月  6 号:德克萨斯州农机大学计算机科学系工业分支计划:待定。 3 月  8 号:工程师 2007(通过学院站的网页):“将 C++ 当作母语”(有少量关于 C++0x 的评述)。 3 月 15 号:英特尔伯克利实验室:“C++0x 纲要”。 3月19-20号:SD07 会议:Stroustrup & Sutter 谈论 C++:“Concepts”、“如何定义优秀的接口”、
           “C++0x 概览”、“C++ 在对安全性要求极高的系统上的应用”。 4 月 20 号:ACCU 2007(于牛津):“C++0x 中的初始化”、“C++0x 纲要”。 4 月 23 号:剑桥大学社会科学系:待定。 6 月 11 号:HOPL-III:“基于现实发展语言,并为其服务:C++:1991-2006”。 本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss ......

阅读全文(2456) | 评论:0

C++0x热点问题访谈 [转](2007-05-11 21:15:00)

摘要:  C++0x热点问题访谈  2004年底前后,经过较长一段时间的沉默,一批世界级的C++著作相继面世。2005年4月,在挪威Lillehammer举行的C++标准委员会会议上,Bjarne Stroustrup促成委员会达成一致意见:让C++0x中的x等于9。2005年11月,Bjarne Stroustrup、Herb Sutter、Stanley B. Lippman、Andrei Alexandrescu等前辈、新锐将在Las Vegas庆祝C++ 廿周年。2005年底,C++中国社群将在上海举办首届“现代C++设计和编程”技术大会……C++好戏连台,令人振奋。笔者近日就C++0x以及其他一些热点问题请教了Bjarne先生。大师观点,不敢专美,整理成文,以飨同好。  C++0x  荣耀:Library TR1(library Technical Reports,库技术报告)和TR2的动机是什么?TR1和TR2、TR1/TR2和C++0x、Performance TR(Performance Technical Reports,性能技术报告)和C++0x、Boost和C++0x之间的关系如何?  Bjarne:Library TR是对标准库改进工作的具体结果的体现。当一套设施、特性就绪后,TR1即被表决通过,然后人们继续向TR2前进。TR1和TR2之间的区别仅在于“时间不同,所做的事情不同”而已。大部分TR1和TR2中的内容有望成为C++0x的一部分。  Performance TR是一个关于C++适合于性能严苛和资源受限的编程的报告,大多和嵌入式系统编程有关。其作用主要在于教育程序员并努力驱散萦绕C++的能与不能的流言蜚语。特别要指出的是,该TR证明C++是一门极好的适合于嵌入式系统编程的语言。  启动Boost项目的人们(著名的如Beeman Dawes)过去是、现在仍然是C++标准委员会的成员。Boost的目标是提供对标准库的扩展,并使得大多数有用且成功的Boost库成为新一代C++标准。其中一部分(而非全部)将会成为C++0x的一部分。注意,当一个库被添加进标准时,往往需要对其进行某种程度的修改。许多TR1扩展一开始都是作为Boost的一个组成部分而开始它们的生命旅程的......

阅读全文(2820) | 评论:0

C++0x 概览 [转](2007-05-11 21:12:00)

摘要:  C++0x概览 — 2005上海“Modern C++ Design & Programming”技术大会致辞 Bjarne Stroustrup C++0x的工作已经进入了一个决定性的阶段。ISO C++委员会对C++0x的目标是使其成为“C++09”。这意味着我们要在2008年完成这个标准以便被ISO成员国批准。最后提交的标准设施将选自目前正被讨论的提案。为了按时完成此项工作,委员会已经停止审查新的提案并将精力集中于已经被讨论的那些提案上。  本文简要描述了C++0x标准化工作的指导原则,展示了一些可能的语言扩展例子,并列出了一些被提议的新标准库设施。  说明:本文首发于2005年11月18-20日在上海举行的“Modern C++ Design & Programming”技术大会。  指导原则  C++是一门偏向于系统编程的通用编程语言。它  是一个更好的C 支持数据抽象 支持面向对象编程 支持泛型编程 当我说“系统编程”时,我是指传统上与操作系统以及基础工具有关的那一类编程任务。包括操作系统核心、设备驱动程序、系统工具、网络应用、字处理工具、编译器、某些图形和GUI应用、数据库系统、游戏引擎、CAD/CAM、电信系统,等等。这类工作在当前的C++用户中占有主导地位。例子参见我的个人主页“Applications”单元(http://www.research.att.com/~bs/applications.html)。   C++0x的目标是使以上的说法仍然成立。它并不是要消除这些编程风格(styles)(或“paradigms”,范型)之一(比方说,使C++不那么兼容于C),或者添加一种全新的“范型”。最有效的编程风格是联合使用这些技术,这也就是我们常说的“多范型编程(multi-paradigm programming)”。因此,可以说我们希望改进C++使其成为一门更好的多范型编程语言。  C++0x的高级目标是  使C++成为一门更好的系统编程语言和构建库的语言。        - 而不是为特定子社群提供专用设施......

阅读全文(3434) | 评论:0