我已经阅读了Scott Meyers写的《Effective C++第三版》。
该书的第3条目,“尽可能使用const
”,指出如果我们希望防止rvalue被意外地分配给函数的返回值,返回类型应该是const
。
例如,针对iterator
的递增函数:
const iterator iterator::operator++(int) {
...
}
然后,一些意外被预防了。iterator it;
// error in the following, same as primitive pointer
// I wanted to compare iterators
if (it++ = iterator()) {
...
}
然而,在GCC中,诸如std::vector::iterator
之类的迭代器并不返回const
值。
vector<int> v;
v.begin()++ = v.begin(); // pass compiler check
这是否有一些原因呢?
&
引用限定符将operator=
定义为默认。 - Johannes Schaub - litb