编程的法则:C++程序员必备的101条实用经验与最佳实践
一共20篇文章
C++是当今主流程序设计语言的一种,由美国AT&T贝尔实验室的BjarneStroustrup 博士于20 世纪80 年代发明和实现的,目的是解决c 语言开发过程中遇到的棘手问题。C++语言起初被称之为“C withClasses”、“a better C”,作为C 语言的增强版而出现,直到1998年才正式更名为C++。
-
第十九章:尽可能多地使用 const,了解C/C++基本语言特性关键字【免费技术教程】
关键字是预先保留的标识符,每个关键字都有特殊的含义。程序不能使用与关键字同名的标识符。标准C++有63个关键字,根据关键字的作用,可以将其分为数据类型关键字和流程控制关键字两大类。正确而恰当地使用关键字可以有效地提高程序的质量,起到事半功倍的效果。但如果不恰当地使用这些关键字,则可能会使程序存在某种程度的缺陷,甚至会给程序带来灾难性的后果。本章重点讨论C++的关键字, 以及关键字使用中的陷阱和注意…
- 0
- 0
- 12
-
第十八章:如何判定变量是否相等,了解C/C++基本语言特性变量和类型【技术教程】
判断两个变量是否相等,是所有程序开发人员都会碰到的问题。肯定有人会说判断两个变量是否相等还不简单:假设两个变量分别为a和 b,如果(a=b)为真就说明 a和 b相等,否则就说明不相等。也许大多数人都这么认为,那说明你们还是C/C++开发新手,其实在 C/C++中判断两个变量相等与否是一件很麻烦的事情,下面我们将慢慢阐述。 其实判断两个变量是否相等,有两点是非常重要的:一是两个变量分别都是什…
- 0
- 0
- 15
-
第十七章:深刻理解void 和void*,了解C/C++基本语言特性变量和类型【技术教程】
void和void*,无论对于初学者还是对于部分有经验的程序员来说,都是一个似是而非的东西。尤其对于初学人员,由于对void和void*不甚理解,所以也是出问题较多的地方。本实用经验将对void 关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 void的字面值是“无类型”,void*则为“无类型指针”。void*可以指向任何类型的数据。void几乎只有“注释”…
- 0
- 0
- 15
-
第十六章:提防隐式转换带来的麻烦,了解C/C++基本语言特性变量和类型【技术教程】
在C/C++中,类型转换发生在这种情况下:为了实现不同类型的数据之间进行某一操作或混合运算,编译器必须把它们转换成同一种类型的数据。 C/C++语言中的类型转换分为两种:一种是隐式转换,特指那些由编译器完成的类型转换;另一种是显式转换,特指那些由开发人员显式进行的数据类型转换。 说明: 隐式转换在编译过程中由编译器按照一定的规则自动完成,无须任何人为干预。显式转换由人为因素显式干预…
- 0
- 0
- 11
-
第十五章:既有结构,为何引入联合,了解C/C++基本语言特性变量和类型【技术教程】
struct结构体是由一系列相同类型或不同类型的数据构成的数据集合。结构体也称结构。结构体的一般定义形式如下: struct结构体名称 { 成员表列 }变量表列; 例如: /*定义一个名称为 Person的结构体* struct Person { char *pszName; /*Person的名称*/ Inti Sex; /*Person 的性别*/ }Boy;//定义一个名…
- 0
- 0
- 9
-
第十四章:优化结构体中元素的布局,了解C++基本语言特性变量和类型
在开始讨论之前,我们先看两个结构体类型,分别为 struct A和 struct B。 struct A //A数据结构1 { long 1A; //lA long 数据 char cB; // cB char 数据 short nC; // nC short 数据 }; struct A { char cB long 1A: short nC; }; 在 32 位的机器上,cha…
- 0
- 0
- 35
-
第十三章:typedef 使用的陷阱,了解C++基本语言特性变量和类型
无论在 C 还是在 C++代码中,typedef 都是出现频率较多的一个关键字。typedef本身的功能是很容易理解的,其主要功能是定义一个已存在类型的别名,但是和宏并存,问题就变得复杂了。再加上国内一些教科书的问题,导致一些编程人员将宏和typedef 混为一谈. typedef 有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。使用typedef 可编写出更加美观和可读的代码。所…
- 0
- 0
- 67
-
第十二章:实现可变数组 struct{int namelen; char namestr[1];};,了解C++基本语言特性变量和类型
变长数组(非const 变量来定义数组的长度)是每个C++开发人员梦寐以求的东西。通常实现 C++变长数组时,主要通过 new(或 malloc)实现。如下面这段代码: nt inamelen=100: char *pNameStr=new char [inamelen ]; 但这种实现有两个显著的缺点: (1) pNameStr指针无法记录自己的长度,它的长度必须另行存储,…
- 0
- 0
- 57
-
第十一章:为何struct x1{struct x1 stX};无法通过编译,了解C++基本语言特性变量和类型
大家经常会碰到这样的问题:定义一个数据类型,而此数据类型又包含此数据类型的变量。通常做法应该是把数据类型中的变量定义为指针形式。例如定义一个二叉树的节点: struct tagNode //二叉树节点 { ElemType data; //节点数据 struct tagNode *pLeftNode; //节点左孩子 struct tagNode *pRightNode; //节点…
- 0
- 0
- 62
-
第十章:枚举和一组预处理的#define 有何不同,了解C++基本语言特性变量和类型
经常遇到这样的问题:为某些属性定义一组可选择的值。例如,文件的打开状态可能会有3种:输入、输出和追加。记录这些状态值的一种方式是定义每种状态都与一个唯一的常量数值相关联。我们可以定义下面这些状态码: #define INPUT_MODE 0// 输入模式 #define OUTPUT_MODE 1 // 输出模式 #defineAPPEND_MODE 2// 追加模式 虽然这种方式也可奏效…
- 0
- 0
- 57
-
第九章:引用难道只是别人的替身,了解C++基本语言特性变量和类型
引用是我们多次讨论的概念了,引用只是默认值的别名。对引用唯一的操作就是将其初始化。一旦引用初始化结束,引用就只是其默认值的另一种写法罢了。引用变量没有地址,甚至它们可能不占用任何存储空间。 注意事项 (1) 声明引用的引用、指向引用的指针、指向引用的数组都是非法的。 (2) 引用不可能带有常量性和挥发性,因为别名不能带有常量性和挥发性。用关键字const和volatile修饰引用会…
- 0
- 0
- 48
-
第八章:掌握变量定义的位置与时机,了解C++基本语言特性变量和类型
变量是 C/C++代码的重要组成部分,几乎所有的 C/C++代码都存在变量的影子,既有内置类型的,也有自定义类型的。虽然变量很常见,但合理和高效地使用它们也有一定的玄机和技巧。掌握这些技巧,在合适的时机把变量定义在合适的位置,会提高代码的可读性和高效性。 C89中规定,在执行任何语句之前,在块的开头声明本语句块使用的所有局部变量,否则此语句块将无法通过编译。而 C99 和 C++则没有这样…
- 0
- 0
- 39
-
第七章:局部变量和全局变量的差别,了解C++基本语言特性变量和类型
变量一般包含4种:全局变量、静态全局变量、静态局部变量和局部变量。按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,函数返回后失效。 …
- 0
- 0
- 49
-
第六章:确保每个对象在使用前已被初始化,了解C++基本语言特性变量和类型
关于“将对象初始化”这个问题,C++似乎反复无常。如果你定义一个int变量,编写这样的代码: int x; 在某些语境下x保证会初始化为 0,但在其他语境下却无法保证。如果你编写了这样的代码: Class CPoint //二维点数据类 { intmiX; //二维点的x坐标 int m_iY; //二维点的y 坐标 } ... CPointpt; …
- 0
- 0
- 53
-
第五章:计算机是如何存储变量的,了解C++基本语言特性变量和类型
变量是所有程序的基础,类型告诉编译器数据代表什么意思以及可对此数据执行的操作。例如int类型的数据可以执行加减法,而bool类的数据就不能进行加减法。这些都是数据类型规定的。C++语言定义了几种基本类型:字符类型、整型、浮点型等,除此之外,C++还提供了可用于自定义类型的机制,如可自定义类类型。变量和类型是C++语言基础的概念,同时也是编程中最容易疏忽的地方。本章将介绍变量和类型的相关概念和编…
- 0
- 0
- 63
-
第四章:C++比C加了什么,了解C++程序的基本构成,快速入门指南
C++语言被称为 C with Classes、A Better C 或者“C 的超级”,通过简单的处理,C++确实可以编译 C 语言的几乎所有代码。所以可以简单地这么说:“C包含于 C++,是 C++的一个子集。”C++对 C的扩充可不是简单的“++”那么简单。C++对 C的扩充主要表现在面向对象和泛型编程两个部分。当然除了这两部分的重大功能外,C++对C语言的基础方面如函数、变量类型等也进…
- 0
- 0
- 63
-
第三章:掌握在 C++中如何使用 C,了解C++程序的基本构成,快速入门指南
大多数的 C++开发人员也许会遇到这样的问题:你的开发工程是C++语言实现的,但你使用的库却是标准 C语言编译器编程的库,在编译链接时,总是不停地报出错误。 为了演示我们经常遇到的问题,来看如下这段代码: /*C 语言头文件:Max.h*/ #ifndef MAX H #define MAX_H //Max 函数声明,此函数功能为求得两数据 nA和 nB的大者 #endif…
- 0
- 0
- 66
-
第二章:既有面向过程,为何还要面向对象,了解C++程序的基本构成,快速入门指南
面向过程的程序设计思路:分析解决问题所需步骤,用函数把这些步骤依次实现。面向过程是在面向对象产生之前及之后,甚至时至今日还应用于程序开发中的程序设计思想。面向对象的程序设计思路:把构成问题的事务分解为各个对象,建立对象目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。从上述描述中可以看出,其实面向过程和面向对象是两种思考解决问题的方式,其差异主要在于思考的角度。 面向对象…
- 0
- 0
- 83
-
第一章:了解C++程序的基本构成,快速入门指南
C++语言由美国AT&T贝尔实验室的Bjarne Stroustrup博士于20 世纪80 年代发明和实现,目的是解决C 语言开发过程中遇到的棘手问题。C++语言起初被称为Cwith Classes、A Better C,作为C语言的增强版而出,直到 1998 年才正式更名为C++。 从其发展过程我们可以看到,C++语言由C语言发展而来(兼容C语言),功能远…
- 0
- 0
- 55
-
编程的法则:C++程序员必备的101条实用经验与最佳实践
前言 C++是当今主流程序设计语言的一种,由美国AT&T贝尔实验室的BjarneStroustrup 博士于20 世纪80 年代发明和实现的,目的是解决c 语言开发过程中遇到的棘手问题。C++语言起初被称之为“C withClasses”、“a better C”,作为C 语言的增强版而出现,直到1998年才正式更名为C++。 C++是一种颇受争议的语言。这主要体现…
- 0
- 0
- 70