默认参数
1. 常规默认参数
类型模板参数可以有默认值。但指定默认值有一个规矩:如果某个模板参数有默认值,那么从这个默认值的模板参数开始,后面的模板参数都得有默认值。
template<typename T = char, typename U = int>
struct TC {
...
};
int main() {
TC<> mytc1; // 都使用默认参数,则<>中什么也不用提供
TC<double> mytc2; // <>中第一个类型不使用默认参数,第二个类型使用默认参数
}
当然,类模板的偏特化版本中的类型模板参数不可以有默认值。
template<typename T = char>
struct TC<T, int> {
...
};
2. 后面的模板参数依赖前面的模板参数
template<typename T, typename U = T*>
struct TC {
...
};
3. 在模板声明中指定默认参数
// 声明1:指定了V和W
template<typename T, typename U, typename V = int, typename W = char>
struct TC;
// 声明2:指定了U
template<typename T, typename U = char, typename V, typename W>
struct TC;
// 在定义时就不要指定默认参数了
template<typename T, typename U, typename V, typename W>
struct TC {
//...
};
int main() {
TC<int> mytc; // 第2,3,4个模板参数都采用默认值,所以<>中只提供了一个类型模板实参
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端