CTAD(Class Template Argument Deduction,类模板参数推导) 是 C++17 引入的特性,允许编译器根据构造函数参数自动推导模板参数,从而简化模板类的实例化代码。以下是 CTAD 的详细解析和用法示例:
一、CTAD 的核心作用
-
简化模板类实例化:无需显式指定模板参数。
-
提升代码可读性:减少冗余的类型声明。
-
支持复杂类型推导:如嵌套模板、函数指针等。
二、CTAD 的基本用法
1. 标准库中的 CTAD
C++17 标准库中的许多容器和工具类支持 CTAD:
std::pair p(42, "hello"); // 推导为 std::pair<int, const char*>
std::vector v = {1, 2, 3}; // 推导为 std::vector<int>
std::lock_guard lock(mtx); // 推导为 std::lock_guard<std::mutex>