STL 模板起源

1. C++ 为静态类型语言

在这里插入图片描述

  • 虽然类型安全(可以指定类型)由于数据类型的不一致,把近乎相同的函数写了三遍
    在这里插入图片描述

2. 宏可以摆脱数据类型的限制

在这里插入图片描述

  • 蓝色部分就是预编译时做的纯文本替换,但cx和cy代表的是数组首元素的地址, 而不是比较“world” 和 “hello”首字母的assic值
    在这里插入图片描述

  • 结合上面两个程序的优点, 搞一个类型安全,代码通用的函数框架

3. 利用宏构建通用函数框架

其实本质就是利用宏让与编译器来实现一些函数, 而不用手动去写
在这里插入图片描述

#include <iostream>
using namespace std;

// 可以把##理解为前后连接在一起
#define MAX(T) T max_##T(T x, T y){\
    return x > y ? x : y;\
}

// 下面的在预编译时都会转为相应的函数
MAX(int)
// int max_int(int x, int y){ return x > y ? x : y;}
MAX(double)
// double max_double(double x, double y){ return x > y ? x : y;}
MAX(string)
// string max_string(string x, string y){ return x > y ? x : y;}

// 但如果直接在代码中去用 max_int(a, b) 并不直观, 因为程序中看不到max_int, 是由编译器完成的
// 所以这里又加了一个宏,Max(int)(a, b) 相当于 max_int(a, b)
#define Max(T) max_##T

int main(){
    int nx = 10, ny = 20;
    cout << Max(int)(nx, ny) << endl;
    
    double dx = 1.1, dy = 2.2;
    cout << Max(double)(dx, dy) << endl;

    string sx="world", sy="hello";
    cout << Max(string)(sx, sy) << endl;
    
    // char* 是可以给string传参的 
    char cx[256]="world", cy[256]="hello";
    cout << Max(string)(cx, cy) << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值