[C++ Primer] 第七章的若干问题

1 将const引用作为形参(P203)

如果函数的形参是非const的引用,就不能通过const对象进行调用,而且传递一个右值或者需要进行类型转换的对象同样是不允许的,因为非const引用的形参只能与完全同类型的非const对象关联。

忠告:当确定函数不改变引用形参的值时,应该将引用形参定义为const引用。


2 容器作为形参

当将容器作为形参时,要进行容器之间的拷贝,代价较大。

忠告:尽量不将容器作为形参,而是通过传递迭代器来传递容器。


3 引用返回左值(P215)

返回引用的函数返回左值,因此,这样的函数可用于任何要求使用左值的地方,例如赋值。


4 指定默认实参的约束(P219)

既可以在函数声明也可以在函数定义中指定默认实参。但是,在一个文件中,只能为一个形参指定默认实参一次。如果在函数定义的形参表中提供默认实参,那么,只有在包含该函数定义的源文件中调用该函数时,默认实参才是有效的。

忠告:在函数声明中指定默认实参,并将该声明放在合适的头文件中。


5 内联函数(P222)

内联机制适用于优化小的,只有几行的而且经常被调用的函数,通常内联函数在头文件中定义,在头文件中加入或者修改内联函数时,使用了该头文件的所有源文件都必须重新编译。

忠告:将代码短小而且经常被使用的函数定义为内联函数,内联函数在头文件中定义。


6 定义成员函数的函数体(P223)

编译器隐式地将在类内定义的成员函数当作内联函数。

忠告:对于代码小的而且常用的类成员函数,在类的头文件代码中直接定义。


7 this指针的引入(P224)

每个成员函数(除了static成员函数之外)都有一个额外的、隐含的形参this,在调用成员函数时,形参this初始化为调用函数的对象的地址。


8 const成员函数(P224)

定义形式为,在函数形参后面括号之外加const。称之为常量成员函数,这种函数不能修改调用该函数的对象。

忠告:由于const对象、指向const对象的指针或者引用只能用于调用其const成员函数,因此可以将不改变对象本身的函数定义为const成员函数。


9 合成的默认构造函数(P227)

即编译器合成的默认构造函数,这里主要说的是合成的默认构造函数对于类数据成员的初始化问题。对于具有类类型的成员,会调用该成员所属类的默认构造函数进行初始化。对于内置类型,如果对象在全局作用域中定义或者定义为静态局部对象,则这些成员被初始化为0,如果是局部对象,则这些成员没有被初始化。这与内置类型在程序中的初始化类似。对于内置类型,如果内置类型定义为全局的或者是静态局部的,就被初始化为0,如果是局部自动变量,则没有被初始化。

你可能感兴趣的:(C++,C++,Primer)