函数
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函数的内容来代替,也就是说,实际运行中并没有进行函数的调用。