你必须注意的11个C++要点c++最重要的知识点




你必须注意的11个C++要点c++最重要的知识点

2022-07-20 19:23:30 网络知识 官方管理员

你必须注意的11个C++要点

下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许多资料中都不愿提到的地方,也是经常出错的地方,甚至是对一些高级的C++程序员也是如此。

这里的要点不仅仅是解释怎样写出更好的代码,更多的是展现出语言规则里面的东西。很显然,它们对C++程序员来说是永久的好资料。我相信这一篇文章会使你收获不小。

首先,我把一些由不同层次的C++程序员经常问的问题归到一起。我惊奇的发现有很多是有经验的程序员都还没意识到.h符号是否还应该出现在标准头文件中。

要点1:<iostream.h>还是<iostream>?

很多C++程序员还在使用<iostream.h>而不是用更新的标准的<iostream>库。这两者都有什么不同呢?首先,5年前我们就开始反对把.h符号继续用在标准的头文件中。继续使用过时的规则可不是个好的方法。从功能性的角度来讲,<iostream>包含了一系列模板化的I/O类,相反地<iostream.h>只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,<iostream>和<iostream.h>在接口和执行上都是不同的。最后,<iostream>的各组成都是以STL的形式声明的,然而<iostream.h>的各组成都是声明成全局型的。

因为这些实质上的不同,你不能在一个程序中混淆使用这两个库。做为一种习惯,在新的代码中一般使用<iostream>,但如果你处理的是过去编写的代码,为了继承可以用继续用<iostream.h>旧保持代码的一致性。

要点2:用引用传递参数时应注意的地方

在用引用传递参数时,最好把引用声明为const类型。这样做的好处是:告诉程序不能修改这个参数。在下面的这个例子中函数f()就是传递的引用:

voidf(constint&i);

intmain()

{

f(2);/*OK*/

}

这个程序传递一个参数2给f()。在运行时,C++创建一个值为2的int类型的临时变量,并传递它的引用给f().这个临时变量和它的引用从f()被调用开始被创建并存在直到函数返回。返回时,就被马上删除。注意,如果我们不在引用前加上const限定词,则函数f()可能会更改它参数的值,更可能会使程序产生意想不到的行为。所以,别忘了const。

这个要点也适用于用户定义的对象。你可以给临时对象也加上引用如果是const类型:

structA{};

voidf(constA&a);

intmain()

{

f(A());//OK,传递的是一个临时A的const引用

}

要点3:逗号分离表达形式

逗号分离表达形式是从C继承来的,使用在for-和while-循环中。当然,这条语法规则被认为是不直观的。首先,我们来看看什么是逗号分离表达形式。

一个表达式由一个或多个其它表达式构成,由逗号分开,如:

if(++x,--y,cin.good())//三个表达式

这个if条件包含了三个由逗号分离的表达式。C++会计算每个表达式,但完整的逗号分离表达式的结果是最右边表达式的值。因此,仅当cin.good()返回true时,if条件的值才是true。下面是另一个例子:

intj=10;

inti=0;

while(++i,--j)

{

//直到j=0时,循环结束,在循环时,i不断自加

}

要点4,使用全局对象的构造函数在程序启动前调用函数

有一些应用程序需要在主程序启动前调用其它函数。如:转态过程函数、登记功能函数都是必须在实际程序运行前被调用的。最简单的办法是通过一个全局对象的构造函数来调用这些函数。因为全局对象都是在主程序开始前被构造,这些函数都将会在main()之前返回结果。如:

classLogger

{

public:

Logger()

{

activate_log();//译者注:在构造函数中调用你需要先运行的函数

}

};

Loggerlog;//一个全局实例

intmain()

{

record*prec=read_log();//译者注:读取log文件数据

//..程序代码

}

全局对象log在main()运行之前被构造,log调用了函数activate_log()。从而,当main()开始执行时,它就可以从log文件中读取数据。

毫无疑问地,在C++编程中内存管理是最复杂和最容易出现bug的地方。直接访问原始内存、动态分配存储和最大限度的发挥C++指令效率,都使你必须尽力避免有关内存的bug。

要点5:避免使用复杂构造的指向函数的指针

指向函数的指针是C++中可读性最差的语法之一。你能告诉我下面语句的意思吗?

void(*p[10])(void(*)());


发表评论:

最近发表
网站分类
标签列表