咨询C++中省略模板尖括号特性的名称及引入版本
关于类模板实参推导(CTAD)的解答
你观察得非常细致!你提到的这种省略模板尖括号<>就能实例化类模板的特性,叫做类模板实参推导(Class Template Argument Deduction,简称CTAD)。
具体到你举的例子:
- 当你写
std::uniform_int_distribution<> distrib(1, 6);时,是显式使用了模板的默认参数(uniform_int_distribution的默认模板参数为int); - 而
std::uniform_int_distribution distrib(1, 6);则是依赖CTAD特性,编译器会根据构造函数传入的int类型实参(1和6),自动推导出模板参数应该为int,所以两者的效果完全等价。
这个实用的特性是在C++17标准中正式引入的,它简化了类模板的使用,避免了很多不必要的模板参数重复书写。另外,对于一些构造函数实参无法直接推导出模板参数的场景,C++17还提供了**推导指引(deduction guides)**来辅助编译器完成推导,不过std::uniform_int_distribution的构造函数本身已经足够让编译器完成推导,所以不需要额外的指引。
内容的提问来源于stack exchange,提问作者Zizheng Tai
相关产品推荐
相关产品推荐

