C++ Primer 读书笔记——函数
2017-08-24 13:32
267 查看
C++ Primer 读书笔记4
关键概念
分离式编译——P186可变形参——P197
void fun(initializer_list<string> il)//initializer_list定义在同名的头文件中 { //initializer_list当做容器处理 } fun({"q","w","a"});
initializer_list对象的元素永远是常量值。
重载与作用域——P210
如果我们在内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。在不同作用域中无法重载函数名。
内联函数和constexpr函数——P210
内联函数是用空间换时间用于规模较小、流程直接、频繁调用的函数。
string read(); void print(const string &); void print(double);//重载print函数 void fooBar(int ival) { bool read=false;//新作用域:隐藏外层的read string s=read();//错误:read是一个bool值,不是函数 void print(int);//新作用域:隐藏之前的print print("Value:");//错误:print(const string &)被隐藏 print(3.14);//正确:调用print(int);print(double)被隐藏掉了 }
调试帮助——P215
函数指针——P221
注意点
函数中实参是形参的初始值,第一个实参对应第一个形参。但是编译器能以任意可行的顺序对实参求值(实参可以是函数或者表达式)形参名是可以省略的,未命名的形参无法使用。
函数的返回类型不能是数组类型或者函数类型。
局部静态对象的生命周期贯穿函数调用及之后的时间(函数调用结束后不销毁,程序终止时被销毁)(静态把对象的生命周期提升了一个级别?)——P185
当使用数组作为形参,要防止数组使用的越界。
数组引用形参一定要加括号
void fun(int (&arr)[10]); //正确:arr是具有10个整数的整形数组的引用。 void fun(int &arr[10]); //错误:将arr声明成引用的数组。
函数不能反回局部对象的引用或指针。
返回引用的函数得到的是左值其他类型得到的是右值。
在给定作用域中一个形参只能被赋予一次默认实参。
调用重载函数时应该尽量避免强制类型转换。如果在实际应用中确实需要强制转换类型转换,则说明我们设计的形参集合不合理。
函数指针的类型必须与重载函数中的某一个精确匹配。
小技巧
通过使用引用避免拷贝(拷贝大的类类型对象或者容器对象是比较低效的),如果不需要改变形参的值,只需要将其声明为常量引用。void fun(const int &i) { }
C++可以使用尾置返回类型
//func返回一个指针,该指针指向含有10个整数的数组 auto func(int i)->int(*)[10];
如果形参是某种类型的指针或引用,通过区分其指向的是常量对象还是非常量对象可以实现函数重载。——P208
函数不能定义函数类型的形参,但是可以定义指向函数的指针,同理可以定义返回指向函数的指针。
将auto和decltype用于函数指针类型
int func1(const int&); int func2(const int&); //根据形参的取值,getFun函数返回指向func1或者func2的指针。 decltype(func1) *getFun(const string&);
相关文章推荐
- C++ primer 读书笔记(第6章)函数
- 读书笔记:C++ Primer系列(14)—— C++函数及参数传递
- 《C++ Primer》读书笔记第六章-3-特殊特性 And 函数匹配 And 函数指针
- 读书笔记:C++ primer 5th edition--chapter 6.函数
- 《C++ Primer 4th》读书笔记 第7章-函数
- C++ Primer 读书笔记 Chapter 7 函数
- C++ Primer 第四版读书笔记(六)之函数
- C++ primer 读书笔记系列——(4)函数
- 《C++ Primer》读书笔记-第六章 01 函数基础
- 《C++ Primer》读书笔记第六章-2-返回类型 And 函数重载
- 《C++ Primer》读书笔记-第六章 06 函数匹配
- 《C++ Primer》读书笔记第六章-1-函数基础 And 参数传递
- 《C++ Primer》读书笔记-第六章 04 函数重载
- 《C++ Primer》读书笔记第十四章-2-函数调用运算符
- C++ primer 读书笔记 第七章 --函数
- 《C++ Primer》读书笔记第十一章-2-关联容器操作
- 《C++ Primer》读书笔记(7.7)
- 《Python基础教程》 读书笔记 第六章 抽象 函数 参数
- [读书笔记]js函数参数的按值传递
- 读书笔记:C++ primer 5th edition--chapter13.拷贝控制