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的加减乘除
}

 

posted @ 2020-09-29 22:05  ctxcc  阅读(92)  评论(0)    收藏  举报