升级库中以下定义的含义是什么?

时间:2016-05-05 11:08:19

标签: c++ boost

我正在研究内部的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

2 个答案:

答案 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);

&&位表示它是一个左值引用(虽然小心,当模板发挥作用时,它并不总是如此......)。这与更熟悉的左值参考符号&非常相似。