我读过Scott Meyers编写的Effective C++ 3rd Edition.
本书的第3项" const尽可能使用",如果我们想要防止rvalues被意外地分配给函数的返回值,那么返回类型应该是const.
例如,增量函数iterator:
const iterator iterator::operator++(int) {
...
}
Run Code Online (Sandbox Code Playgroud)
然后,防止了一些事故.
iterator it;
// error in the following, same as primitive pointer
// I wanted to compare iterators
if (it++ = iterator()) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,std::vector::iteratorGCC中的迭代器不返回const值.
vector<int> v;
v.begin()++ = v.begin(); // pass compiler check
Run Code Online (Sandbox Code Playgroud)
这有什么理由吗?