我正在研究内部的boost库,并对以下定义感到困惑:
namespace boost {
namespace container {
template<typename CharT, typename Traits = std::char_traits<CharT>,
typename A = std::allocator<CharT> >
class basic_string;
template<typename CharT, typename Traits, typename A>
basic_string< CharT, Traits, A > basic_string< CharT, Traits, A > &&
operator+(basic_string< CharT, Traits, A > basic_string< CharT,
Traits, A > && mx, const basic_string< CharT, Traits, A > & y);
basic_string< CharT, Traits, A > basic_string< CharT, Traits, A > && mx
类型的含义是什么?这与long long int
类型相似吗?
以下是推荐参考链接:boost 1.48.0
答案 0 :(得分:4)
这可能是boost文档中的一个问题,operator+
的模板定义对我来说看起来像语法错误。但是,检查相应的头文件时,定义如下所示:
template <class CharT, class Traits, class A> inline
BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A)
operator+(
BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx
, const basic_string<CharT,Traits,A>& y)
{
mx += y;
return boost::move(mx);
}
将宏BOOST_RV_REF_3_TEMPL_ARGS
定义为
#define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
TYPE<ARG1, ARG2, ARG3> && \
//
,对我来说看起来非常好,与文档不同。
答案 1 :(得分:0)
逐点打破......
1)这是一个模板
template<typename CharT, typename Traits, typename A>
2)对于返回某种类型
的右值引用的函数basic_string< CharT, Traits, A > basic_string< CharT, Traits, A > &&
3)该功能为operator+
operator+(basic_string< CharT, Traits, A > basic_string< CharT,
Traits, A > && mx, const basic_string< CharT, Traits, A > & y);
&&
位表示它是一个左值引用(虽然小心,当模板发挥作用时,它并不总是如此......)。这与更熟悉的左值参考符号&
非常相似。