固定长度向量类的拷贝构造、赋值及临时对象优化
1. 固定长度向量类的拷贝构造与赋值
在处理固定长度向量类(fixed_vector)时,我们面临如何实现拷贝构造和拷贝赋值,以及如何提供最大可用性的问题。
原问题中,其实已经有可用的拷贝构造函数和拷贝赋值运算符。为了增强构造和赋值的灵活性,我们添加了模板构造函数和模板赋值运算符:
template<typename O, size_t osize>
fixed_vector( const fixed_vector<O,osize>& other )
{
copy( other.begin(),
other.begin()+min(size,osize),
begin() );
}
template<typename O, size_t osize>
fixed_vector<T,size>&
operator=( const fixed_vector<O,osize>& other )
{
copy( other.begin(),
other.begin()+min(size,osize),
begin() );
return *this;
}
需要注意的是,上述函数并非拷贝构造函数和拷贝赋值运算符。拷贝构造或赋值运算符要求从完全相同类型的另一个对象进行构造或赋值。而模板构造函数和模板赋值运算符可以参与重载解析,若提供了比其他构造函数更好的匹配,则可用于复制对象。
超级会员免费看
订阅专栏 解锁全文
500

被折叠的 条评论
为什么被折叠?



