模板参数自动推导

基础介绍

c++17版本引入了模板参数类型自动推导功能,在此之前的c++版本使用模版必须显式的指定模板的参数,到了c++17版本可以根据输入的参数自动推导模板参数的类型。注意,模板参数自动推导功能不能自动推导默认构造函数,因为默认构造函数的定义不会显式的输入任何参数,编译器无法推导。

具体实例

文字介绍比较空洞,下面通过例子的形式介绍该版本的特性。

c++17之前模板的使用

std::pair<int, double> p1(1,2.3);
std::vector<int> v1{1,2,3,4};
std::touple<int, std::string, double> t1{1, "hello", 2.3};

c++17引入该特性后的实现

std::pair p1(1,2.3);
std::vector v1{1,2,3,4};
std::touple t1{1,"hello", 2.3};

默认构造函数错误示例

std::vector v;           // 错误:无法推导元素类型
std::vector v{};        // 错误:无法推导元素类型
std::vector<int> v;     // 正确:显式指定类型

请看上面的例子,错误的例子之所以错误是因为没有显式的指定模板参数,造成编译器无法自动推到,这种情况下只能显示的指定参数类型编译器才能处理。

具体示例

template <typename T, typename U>
class Pair {
    T first;
    U second;
public:
    Pair(T f, U s) : first(f), second(s) {}
};

// C++17 之前
Pair<int, std::string> p1(1, "hello");    // 必须显式指定类型

// C++17 之后
Pair p1(1, "hello");                       // 自动推导为 Pair<int, const char*>

上面的例子比较清楚的展示了这个特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值