C++primer 第六章
· static局部静态变量:同全局变量都是:默认初始化0 程序终止才销毁
· 分离式编译:假设fact函数的定义位于一个名为fact.cc的文件,它的声明位于Chapter6.h头文件。显然与其他所有用到fact函数的文件一样,fact.cc应该包含Chapter6.h头文件
· 含有可变形参的函数:
①initializer_list 形参 (此对象中的元素永远是 常量值) C++
void error_msg(initializer_list<string> il) { ...} //expected, actual是string对象 if(expected != actual) error_msg ({"functionX", expected, actual}); else error_msg ({"functionX","okay"});
②省略符形参 C
void foo(parm_list, ...); void foo(...);
· 不要返回局部对象的引用或指针:函数完成后,它所占用的存储空间也随之被释放
· 函数可作为左值:返回常量引用的函数 = 赋值
· 函数可return 列表
· 内联函数inline:在函数最开头写上inline
· constexpr函数:返回类型及所有形参的类型都得是 字面值类型, 而且有且只有一条return语句
· 内联函数和constexpr函数通常定义在头文件
· 函数指针:
// pf指向一个函数,该函数的参数是两个const string的引用,返回值是bool类型 bool (*pf) (const string &, const string &); // 声明一个名为pf的函数,该函数返回bool* bool *pf (const string &, const string &);
· 使用函数名来赋值:自动转换成指针 如:pf = lengthCompare //pf指向名为lengthCompare的函数
· 形参可以是函数指针
· 练习 6.7 加法:
//编写4个函数,加、减、乘、除,用vector对象保存指向这些函数的指针,输出结果 using pt = int (*) (int, int); //或者 typedef int (*pt) (int, int); int addf(int a, int b) { return a + b; } int subf(int a, int b) { return a - b; } int mulf(int a, int b) { return a * b; } int divf(int a, int b) { if (b != 0) return a / b; } int main() { pt p1 = addf; pt p2 = subf; pt p3 = mulf; pt p4 = divf; vector<pt> v; v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); for (auto it : v) cout << it(1,2) << endl; //1、2的加减乘除 }
浙公网安备 33010602011771号