C ++ - 什么是参考& operator =在这里做

时间:2014-06-27 03:43:09

标签: c++ c++11

我在阅读有关C ++ 11 STL中的向量的一些内容时遇到了这段代码。它使用operator =的赋值。现在我无法确切地知道它的作用。

以下是代码:

namespace std {

    template <typename Allocator> class vector<bool, Allocator> {
    public:
        // auxiliary proxy type for element modifications:

        class reference {
            ...
        public:
            reference& operator=(const bool ) noexcept; // assignments
            reference& operator=(const reference&) noexcept;
            operator bool( ) const noexcept; // automatic type conversion to bool
            void flip( ) noexcept;
            // bit complement
        };
        ...
        // operations for element access return reference proxy instead of bool:
        reference operator[]( size_type idx );
        reference at( size_type idx );
        reference front( );
        reference back( );

    };
}

从上面的代码我可以理解它返回一种类引用。但我无法理解的是这句话reference& operator=(const reference&) noexcept;。 请在此上下文中告诉我此声明的实际含义

3 个答案:

答案 0 :(得分:5)

reference类是所谓的代理,它伪装成另一种类型,为其提供其他方式无法获得的行为。在这种情况下,它代替bool,因此需要将其赋值给bool。您可以看到此类有两种operator=方法,一种采用bool,另一种采用reference&

operator=的一个规则是它必须返回对象的引用,以便您可以链接=运算符:

b1 = b2 = false;

答案 1 :(得分:3)

使用reference作为一个班级是一个糟糕的选择。但...

功能

reference& operator=(const bool ) noexcept;

返回对reference类型对象的引用。最有可能的是,函数中的return语句如下所示:

return *this;

参加一个简单的课程:

struct A
{
   A(int in) : data(in) {}
   A& operator=(int in)
   {
      data = in;
      return *this;
   }

   A& operator=(A const& rhs)
   {
      data = rhs.data;
      return *this;
   }
};

用法:

A a(10); // a.data is 10
a = 20;  // a.data is 20
A b(5);  // b.data is 5
a = b = 35; // a.data as well as b.data are 35

答案 2 :(得分:2)

你是对的,它返回一个reference对象(实际上它会返回对reference对象的引用 - 这是&的意思)。< / p>

方法名称表示您正在重载赋值运算符=

方法的参数意味着它对const对象采用不可变(reference关键字)引用。

noexcept关键字承诺该方法不会抛出异常。如果你打破了这个承诺,你的程序就会抛出一个运行时异常。

C ++程序员会将此解释为副本赋值运算符。