考虑这个简单的代码:
struct Container {
struct Item {};
Item operator[](size_t /*index*/) const {
return Item();
}
const Item& f() const {
return operator[](0);
}
};
int main()
{
Container c;
const Container::Item& item = *c.begin();
return 0;
}
它有一个错误,我很惊讶它只花了我大约 30 分钟的时间就注意到了:iterator::operator*()
返回对临时对象的引用。通常它会发出警告。为什么不在这种情况下?
MSVC 2013(v120 工具集),使用/W4
.
PS 这是C4172,一级警告。