C++学习细节回顾(汇总二)

发布于:2025-05-15 ⋅ 阅读:(20) ⋅ 点赞:(0)

一.初始化列表相关
1.初始化顺序受申明顺序影响
2.在必要时可以部分不采用初始化列表,避免受特性1影响

二.非类型模板参数
template< class T , size_t N = 10 >

三.特化–特殊化处理
template< class T >
bool less(T left , T right)
{
return left<right;
}
当调用时传入的是地址,这时候比较逻辑存在错误
因此要采用特化(类似于类的显示实例化)
template<>
bool less<Date*>(Date * left ,Date* right)
{
return *left<*right;
}
注意:模板函数一般不采用特化,直接写个匹配的普通函数就行了(有现成吃现成)

小细节讲解:
bool less(const T& left…)
特化:
bool less< const Date*& left> 不对特化不成功,模板函数const修饰的是left ,这里修饰的是 * left
bool less< Date* const & left> ,正确的

四.类模板–特化
1.全特化 template<> class Date< int char >
2.偏特化有两种一种是部分特化,一种是对参数形成限制
template< class T1> class Date< class T1, char >//部分特化
template< class T1 class T2> class Date< T1* ,T2* >//对参数形成限制

类模板特化应用示例
有如下专门用来按照小于比较的类模板Less:
template
struct Less
{
bool operator()(const T& x, const T& y) const
{
return x < y;
}
};

sort( v1.begin() , v1.end() , Less < Date >( ));
// 可以直接排序,结果错误日期还不是升序,而v2中放的地址是升序
// 此处需要在排序过程中,让sort比较v2中存放地址指向的日期对象
// 但是走Less模板,sort在排序时实际比较的是v2中指针的地址,因此无法达到预期
sort(v2.begin(), v2.end(), Less<Date>( ));*
解决方案:// 对Less类模板按照指针方式特化
template<>
struct Less<Date*>
{
bool operator()(Date* x, Date* y) const
{
return *x < *y;
}
};

在这里插入图片描述

五.编译.声明和定义相关问题
在这里插入图片描述
在这里插入图片描述

六…(难点目前不会??????)
1.仿函数
2.普通迭代器和const迭代器

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到