43宏

基本概念

宏在C++中使用内联函数函数模板实现,但是C中的#define也可以实现宏。

预处理指令#define:如 #define BIG 512

C中的宏函数:如 #define TWICE (x) ( (x) * 2)
注意其中必须要写小括号

宏函数的优点:
1.可以做成通用类型,且无视返回类型;
2.运行速度很快

随之带来的缺点:没有进行类型检查。

为了解决这个缺点,C++内置了函数模板和内联函数,来代替宏的功能

函数模板: 关键字== template且无视返回类型==用于写那些功能雷同但是由于返回类型未知而做大量重复工作的函数。

内联函数:关键字inline,就地展开就地执行,无调用和返回,用来代替宏函数,但是也要定义很多个(受返回类型的限制)

内联模板函数:集大成者,完美替代品。
如:
template< TYPENAME T>
inline T max_it(const T&a, const T&b)

示例代码

#include <iostream>

#define BIG 512             //宏,一般全大写

#define TWICE(x) ((x) * 2)  //小括号要写

#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define MIN(x, y) ((x) < (y) ? (x) : (y))

#define SQUARE(x) (x) * (x)

using namespace std;

int max_int(int a, int b)
{
    return a > b ? a : b;
}

double max_double(double x, double y)
{
    return x > y ? x : y;
}

template<typename T>        //函数模板
T max_t(const T& a, const T& b)
{
     return a > b ? a : b;
}

inline int i_max_int(int a, int b)      //内联函数
{
   return a > b ? a : b;
}

inline double i_max_int(double x, double y)
{
    return x > y ? x : y;
}

template<typename T>            //内联函数模板
inline T max_it(const T&a, const T&b)
{
    return a > b ? a : b;
}

int main()
{
    int myArray[BIG];

    cout << max_int(12, 98) << endl;
    cout << max_double(12.5, 9.8) << endl;
    cout << MAX(12.5, 9.8) << endl;
    cout << max_t(12, 9) << endl;
    cout << max_t(2.2, 2.22) << endl;

    cout << i_max_int(5,6) << endl;

    cout << max_it(88,99) << endl;
    cout << max_it(3.14, 3.5) << endl;

    cout << TWICE(4) << endl;

    cout << MAX(12, 9) << endl;
    cout << MIN(12, 9) << endl;
    cout << SQUARE(5) << endl;
    cout << SQUARE(6+1) << endl;        //如果无括号会出现错误,等价于6+1*6+1=13,所以应该加上小括号


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值