我在阅读有关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;
。
请在此上下文中告诉我此声明的实际含义
答案 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 ++程序员会将此解释为副本赋值运算符。