阅读教程

C++编程技巧与风格

[日期:2008-06-06] 来源:  作者:

由创立C++语言的一代大师编写的《C++编程技巧与风格》一书,本书非常精微深奥.建议有C++语言基础的技术人员阅读。

(译注:本文的翻译相当艰苦。Bjarne Stroustrup不愧是创立C++语言的一代大师,不但思想博大精深,而且在遣词造句上,也非常精微深奥。有很多地方,译者反复斟酌,都不能取得理想的效果,只能尽力而为。

Html格式的文档见译者主页:http://www.wushuang.net

如果你对这个翻译稿有任何意见和建议,请发信给译者:onekey@163.com。

原文的地址为:http://www.research.att.com/~bs/bs_faq.html)

(Bjarne Stroustrup博士,1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑挢大学,AT&T大规模程序设计研究部门负责人,AT&T 贝尔实验室和ACM成员。1979年,B. S开始开发一种语言,当时称为"C with Class",后来演化为C++。1998年,ANSI/ISO C++标准建立,同年,B. S推出其经典著作The C++ Programming Language的第三版。)

这是一些人们经常向我问起的有关C++的风格与技巧的问题。如果你能提出更好的问题,或者对这些答案有所建议,请务必发Email给我(bs@research.att.com)。请记住,我不能把全部的时间都花在更新我的主页上面。

更多的问题请参见我的general FAQ。

关于术语和概念,请参见我的C++术语表(C++ glossary.)。

请注意,这仅仅是一个常见问题与解答的列表。它不能代替一本优秀教科书中那些经过精心挑选的范例与解释。它也不能象一本参考手册或语言标准那样,提供详细和准确的说明。有关C++的设计的问题,请参见《C++语言的设计和演变》(The Design and Evolution of C++)。关于C++语言与标准库的使用,请参见《C++程序设计语言》(The C++ Programming Language)。

目录:

我如何写这个非常简单的程序?

为什么编译要花这么长的时间?

为什么一个空类的大小不为0?

我必须在类声明处赋予数据吗?

为什么成员函数默认不是virtual的?

为什么析构函数默认不是virtual的?

为什么不能有虚拟构造函数?

为什么重载在继承类中不工作?

我能够在构造函数中调用一个虚拟函数吗?

有没有“指定位置删除”(placement delete)?

我能防止别人继承我自己的类吗?

为什么不能为模板参数定义约束(constraints)?

既然已经有了优秀的qsort()函数,为什么还需要一个sort()?

什么是函数对象(function object)?

我应该如何对付内存泄漏?

我为什么在捕获一个异常之后就不能继续?

为什么C++中没有相当于realloc()的函数?

如何使用异常?

怎样从输入中读取一个字符串?

为什么C++不提供“finally”的构造?

什么是自动指针(auto_ptr),为什么没有自动数组(auto_array)?

可以混合使用C风格与C++风格的内存分派与重新分配吗?

我为什么必须使用一个造型来转换*void?

我如何定义一个类内部(in-class)的常量?

为什么delete不会将操作数置0?

我能够写“void main()”吗?

为什么我不能重载点符号,::,sizeof,等等?

怎样将一个整型值转换为一个字符串?

“int* p”正确还是“int *p”正确?

对于我的代码,哪一种布局风格(layout style)是最好的?

我应该将“const”放在类型之前还是之后?

使用宏有什么问题?

我如何写这个非常简单的程序?

特别是在一个学期的开始,我常常收到许多关于编写一个非常简单的程序的询问。这个问题有一个很具代表性的解决方法,那就是(在你的程序中)读入几个数字,对它们做一些处理,再把结果输出。下面是一个这样做的例子:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

int main()

{

vector<double> v;

double d;

while(cin>>d) v.push_back(d); // 读入元素

if (!cin.eof()) { // 检查输入是否出错

cerr << "format error\n";

return 1; // 返回一个错误

}

cout << "read " << v.size() << " elements\n";

reverse(v.begin(),v.end());

cout << "elements in reverse order:\n";

for (int i = 0; i<v.size(); ++i) cout << v[i] << '\n';

return 0; // 成功返回

}

对这段程序的观察:

这是一段标准的ISO C++程序,使用了标准库(standard library)。标准库工具在命名空间std中声明,封装在没有.h后缀的头文件中。



[1] [2] [3] [4] [5] [6] [7] [8] [9..] [14] 下一页   
      
      使用百度搜索:C++编程技巧与风格百度中搜索:C++编程技巧与风格
阅读:
录入:志伟

评论 】 【 推荐 】 【 打印
上一篇:
下一篇:
本文评论       全部评论
发表评论


点评: 字数
姓名:

 
搜一下


 
本周热门教程
 

关于我们 | 广告合作 | 法律声明 | 联系站长 | 网站地图 | 网站搜索 | | Top ↑
Copyright © 志伟教程资料网 Powered by zhiweinet 1.0
 本栏目提供:C++编程技巧与风格