以下定义在boost库中的含义是什么?

4

我正在学习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 参考链接:boost 1.48.0

看看 std::basic_string -- 你发现了任何相似之处吗? - Dan Mašek
@DanMašek 在 std::basic_string 中没有相似性示例。 - Roaid
你能贴一下代码的参考吗? - DimG
编辑完成,升级至1.48.0版本,谢谢。 - Roaid
3
我认为这是文档上的错误。我安装了相同版本(1.48.0)的 Boost,但在头文件 string.hpp 中没有找到这种类型的运算符定义,只看到了普通的运算符定义。此外,使用 c++14 标志时,你的代码无法编译通过。不过,我的判断也可能是错误的。 - DimG
显示剩余4条评论
2个回答

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> && \
//

我认为这个看起来完全正常,与文档不同。


可能文档管理员将宏解释为两种basic_string类型,这是有意义的。谢谢! - Roaid

0

逐步分解如下...

1)这是一个模板

template<typename CharT, typename Traits, typename A>

2)对于返回某种类型的rvalue引用的函数

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

&& 位表示它是一个右值引用(但要小心,当涉及到模板时,情况并非总是如此...)。这与更常见的左值引用符号 & 类似。


1
那不是回答问题。问题是operator+的第一个参数的类型是什么:basic_string< CharT, Traits, A > basic_string< CharT, Traits, A > - Wurmloch
我想TS真正想知道你所说的“某种类型”是什么意思,因为它是由双重basic_string<...>组成的,而basic_string<...>本身就是一种类型。 - DimG
1
关于#2,那到底是什么东西? - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接