C++ primer 第七章

 

这书在年初的时候看了六章,然后就一直放着没看,惭愧……这几天再拿出来,争取看完

 

1. 函数不能返回另一个函数或者内置数组类型,但是可以返回指向函数的指针。

 

2. 指向函数的指针,这是个挺奇怪的东西,不知道主要的用途是什么。

像其它指针一样,函数指针也指向某个特定的类型。函数类型由其【返回类型】以及【形参表】决定,跟函数名无关。

例:bool (*pf) (const string&,const string&); //声明了函数指针pf

 

在引用函数名但没有调用该函数时,函数名将被自动解释为指向函数的指针。

将函数指针初始化为0,表示该指针不指向任何函数。

 

函数的形参可以是指向函数的指针,例:

void foo(string &, bool(*)(int) ); 或者 void foo(string &, bool(int) );

返回指向函数的指针,例

int (*ff(int))(int *,int); 表示函数ff(int)返回一个指针int (*) (int *,int);

使用下面的方式会容易理解:

typedef int (*PF) (int *, int);

PF ff(int);

 

函数指针可以指向重载的函数。

 

3. 引用只是一个别名。

 

4. 在C语言(不是C++)中,具有const形参或者非const形参的函数并无区别。

 

5. 应该将不需要修改的引用形参定义为const引用。因为普通的非const引用形参在使用时不够灵活,既不能用const对象初始化,也不能用字面值或者右值表达式初始化。

 

6. 如果想传递容器,应该倾向于传递指向容器的迭代器。

 

7. 在无法列举传递给函数的所有实参的类型和数目时,可以使用省略符形参。省略符暂停了类型检查机制。可以用如下两种形式:

void foo(parm_list,...); 或 void foo(...);

对C++程序,只能将简单数据类型传递给含有省略符形参的函数。实际上,当需要传递给省略符形参时,【大多数类】类型对象都不能正确赋值。

 

8. 不带返回值的return语句只能用于返回类型为void的函数。

 

9. 如果主函数最后没有return返回,啧编译器会隐式插入返回0的语句。

为了使返回值独立于机器,可以使用cstdlib的两个与处理变量,来代表程序运行成功与失败。

#include<cstdlib>
int main(){
   if(some_failure)
      return EXIT_FAILURE;
   else
      return EXIT_SUCCESS;
}


10. 默认实参是通过给形参表中的形参提供明确的初始值来指定的。程序员可为一个或多个形参定义默认值。但是如果有一个形参定义了默认值,则其后的所有形参都必须有默认形参。

既可以在函数声明处也可以在定义处指定默认实参,但是一个文件中只能指定一次。最好是在声明出指定默认形参。

 

11. static局部对象确保不迟于程序执行流程第一次经过该对象的定义语句时初始化。这种对象一旦被创建,在程序结束前不会被销毁。

 

12. 内联函数:在函数返回类型前加上inline就可以讲函数指定为内联函数。应该在头文件中定义,因为内联函数对于编译器而言必须是可见的,一遍遍一起在调用处展开该函数的代码。

 

13. 构造函数的初始化列表:在构造函数名的冒号和花括号之间的代码,为类的一个或多个数据成员指定初值,形式是每个成员名+圆括号中的初始值,每个成员间用逗号隔开。例:

Class_Name():param_int(0),param_double(0.0){
}


14. 由编译器自动生成的构造函数,一般只适用于仅包含类类型成员的类。对于含有内置类型或复合类型成员,不会自动初始化。

 

15. 如果两个函数声明的返回类型和形参表完全相同,则将第二个视为第一个的重复声明。如果仅有形参表相同而返回类型不同,则第二个声明是错误的。

 

16. 使用枚举类型作为形参的函数,只能用同一枚举类型的另一个对象或者一个枚举成员作为实参。整数对象即使具有与枚举元素相同的值,也不能作为实参。

 

17. 仅当形参是引用或者指针时,是否为const才有影响。

发布了84 篇原创文章 · 获赞 9 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章