C++primer第4版第七章函数

Talk is cheap, show me the code.

  1. 求最大公约数gcd(the greatest common divisor)的最佳方法

    int gcd(int v1, int v2)
    {
    while (v2)
    {
    int temp = v2;
    v2 = v1 % v2;
    v1 = temp;
    }
    return v1;
    }

  2. 函数使用引用形参通常有两个目的:
    只是为了避免创建形参浪费存储空间:这种情况无需改变原有实参,所以应当采用const引用,比如 const string &s;
    为了对原有实参产生影响:定义为string &s,这样可以传入的实参值产生影响。这种作用有一个很好应用:当函数需要返回多个值时,可以避免去创建包含多个元素的结构体,而是直接用形参引用的形式来传值。

  3. 函数形参中使用string引用有一个有意思的地方需要注意:不能用字符串字面值作为函数实参,不是引用却可以。

    void show(string &s) //不能使用show("hello")
    {
    cout << s << endl;
    }

  4. 当将vector等容器作为函数形参时,太浪费空间,通常的做法是将容器的迭代器作为函数形参传入,或者使用引用。

  5. 当将数组作为函数形参时,编译器会对一维数组忽略数组长度,如果需要传入数组长度,需要额外指定数组长度,或者使用数组引用:

    void fun(int (&a)[10]){} //可以传入数组长度10

  6. 千万不要返回函数内定义的局部变量的引用或者指针,因为函数执行结束后会释放函数内变量使用的内存空间。

  7. 函数声明一般放在头文件中,而且函数声明一般会忽略形参变量名,所以可以不写形参变量名,函数声明时不用写花括号。

  8. 带默认形参的函数必须将有默认参数的形参放在参数列表后面,函数声明时也需要写出形参变量名和值。

  9. 仅当形参时引用或指针时,形参是否为const对重载函数区分才有影响。而且如果是指向变量的const指针和一般指针,也不能作为重载函数的区分。

    void fun(const int &a);
    void fun(int &a); //可以区分重载函数
    void fun1(const int*a);
    void fun1(int *a); //可以区分重载函数
    void fun2(int *const a);
    void fun2(int *a); //不能区分重载函数
    void fun3(const int a);
    void fun3(int a); //不能区分重载函数

  10. 函数指针可以隐式解引用和取地址:

    typedef bool (*fun)(const string &);
    bool fun1(const string &a);
    fun = fun1; //等价于fun = &fun1
    const string a = "a";
    fun(a); //等价于(*fun)(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值