gpt4 book ai didi

c++ - std::map::iterator 引用不存在的对象?

转载 作者:太空狗 更新时间:2023-10-29 21:07:17 25 4
gpt4 key购买 nike

考虑以下代码:

class MyClass
{
public:
int someInt;
MyClass() : someInt(666) { }
};

int main()
{
std::map<int,MyClass> myMap;
std::map<int,MyClass>::iterator it = myMap.end();
const MyClass& ref = it->second;
std::cout << ref.someInt << std::endl;
}

因为 map 是空的并且it = myMap.end() , 对象做什么 it->second引用?这是一个无效的引用,因为 it = myMap.end()

map<int,MyClass>不创建 MyClass 的实例.

最佳答案

what Object does it->second reference? Is this an invalid reference because it = myMap.end()?

的确如此。 myMap.end()是一个有效的迭代器,但不能取消引用。 it->second试图完全做到这一点并导致未定义的行为。

map<int,MyClass> does not create an instance of MyClass.

是的,但无关紧要。 myMap.end()将永远——无论 myMap 的内容如何– 包含对“过去结束”迭代器的引用,该迭代器绝不能取消引用。

关于c++ - std::map::iterator 引用不存在的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5459306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com