OSX + Xcode + C++ (5)

函数

1.函数参数

在函数这个概念下,唯一需要特别注意的就是函数的参数传递。与C不同,C++的参数传递除了使用指针,还可以用引用的方式。
C++函数参数传递存在两种:单向和双向。我们来看下面这个交换两个数的例子。

//
//  OneWayTrans.hpp
//  ArgTransf
//
//  Created by Evelyn on 2018/8/2.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#ifndef OneWayTrans_hpp
#define OneWayTrans_hpp

#include <stdio.h>

void swap1(int m, int n);

#endif /* OneWayTrans_hpp */
//
//  OneWayTrans.cpp
//  ArgTransf
//
//  Created by Evelyn on 2018/8/2.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#include "OneWayTrans.hpp"

void swap1(int m, int n) {
    int t = m;
    m = n;
    n = t;
}
//
//  TwoWayTrans.hpp
//  ArgTransf
//
//  Created by Evelyn on 2018/8/2.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#ifndef TwoWayTrans_hpp
#define TwoWayTrans_hpp

#include <stdio.h>
void swap2(int& m, int& n);
#endif /* TwoWayTrans_hpp */
//
//  TwoWayTrans.cpp
//  ArgTransf
//
//  Created by Evelyn on 2018/8/2.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#include "TwoWayTrans.hpp"
void swap2(int& m, int& n) {
    int t = m;
    m = n;
    n = t;
}
//
//  main.cpp
//  ArgTransf
//
//  Created by Evelyn on 2018/8/2.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#include <iostream>
#include "OneWayTrans.hpp"
#include "TwoWayTrans.hpp"

using namespace std;

int main(int argc, const char * argv[]) {
    //
    int a = 12;
    int b = 3;
    cout << "a = " << a << ", b = " << b << "\n";
    cout << "Now change a with b by One-Way arguments tansformation\n";
    swap1(a, b);
    cout << "a = " << a << ", b = " << b << "\n";
    cout << "Now change a with b by Two-Way arguments tansformation\n";
    swap2(a, b);
    cout << "a = " << a << ", b = " << b << "\n";
    return 0;
}

我们来看一下程序的运行结果:

可以看出,调用参数单向传递的交换函数时,没有改变a和b的值,这是因为,在main函数调用swap1时,使用a的值来初始化m,b的值来初始化n,之后,在swap1子函数中,m和n的变化就跟a和b再无关系,直到子函数返回。而在参数双向传递的交换函数中,m和n不再仅仅是子函数swap2的参数,同时也是a和b的引用(或者说别名),这样,对m和n的操作,就是对a和b的操作。

2.内联函数

内联函数使用incline关键字标识,类似于#define机制,是为了减少函数调用时内存和进程切换的开销。在内联函数的调用点,编译器会在预处理阶段将调用点处的内容用incline函数的内容来代替,也就是说,实际运行中并没有进行函数的调用。

猜你喜欢

转载自blog.csdn.net/qq_42857385/article/details/81368768