考虑这个简单的代码:
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
编译。
P上。 S.这是C4172,一级警告。
答案 0 :(得分:1)
看起来它是Visual Studio中的一个错误,你可以发现它是针对VS 2012报告的,看起来它仍然存在于2013年:
https://connect.microsoft.com/VisualStudio/feedback/details/776530/warning-c4172-not-emitted
以上链接可能与其他链接重复,此错误报告中的示例与示例代码完全相同:
container.get(0).get(1) //would return only 26.