banner

6

*操作符的优先级比+操作符高,所以它被首先用于5,因此表达式变成3+30,即33。

tips

对于下面的例子,编译器必须决定先将120除以6,还是先将6和5相乘:

120/6*5

/和*的优先级相同,但这些操作符从左到右结合的。这意味着首先应用操作数(6)左侧的操作符,因此表达式变为20*5,即100。

对于下面的例子,编译器必须决定先对str递增还是先对str解除引用:

后缀++操作符的优先级比一元操作符*高,这意味着加号操作符将对str进行操作,而不是对*str进行操作。也就是说,将指针加1,使之指向下一个字符,而不是修改被指针指向的字符。不过构造函数。例如,假如定义了一个Klunk类,但没有提供任何构造函数,则编译器将提供下述默认构造函数:

Klunk::Klunk(){ } // implicit default constructor

也就是说,编译器将提供一个不接受任何参数,也不执行任何操作的构造函数,这是因为创建对象时总是会调用构造函数:

Klunk lunk;// invokes default constructor

默认构造函数使Lunk类似于一个常规的自动变量,也就是说,它的值在初始化时是未知的。

如果定义了构造函数,C++将不会定义默认构造函数。如果希望在创建对象时显式地对它进行初始.h和ctype.h,且可能要求set和map模板使用另一个less模板参数。旧版本使用前面提到的void count()函数。

程序清单16.17中程序的运行情况如下:

这里的精神就在于,使用STL时应尽可能减少要编写的代码。STL通用、灵活的设计将节省大量工作。另外,STL设计者就是非常关心效率的算法人员,算法是经过仔细选择的,并且是内联的。

16.7 其他库

C++还提供了其他一些类库,它们比本章讨论前面的例子更为专用。Complex头文件为复数提供了一个complex类模板,专用于float、l