我正在写一个布局奇怪的棋盘游戏,所以我有一个map
从一个点到一个地方的价值。如果该地点是空的,则它不在地图中,因此如果find
返回end()
该地点是空的。如果我想检查某个地方的颜色是什么,我会使用以下内容。此代码有效吗?或者换句话说,比较是否end
安全lColour
enum COLOUR {BLACK,WHITE}
this->mBoard.find(Point(p.x - 1, p.y))->second == lColour
lColour
类型在哪里COLOUR
我正在写一个布局奇怪的棋盘游戏,所以我有一个map
从一个点到一个地方的价值。如果该地点是空的,则它不在地图中,因此如果find
返回end()
该地点是空的。如果我想检查某个地方的颜色是什么,我会使用以下内容。此代码有效吗?或者换句话说,比较是否end
安全lColour
enum COLOUR {BLACK,WHITE}
this->mBoard.find(Point(p.x - 1, p.y))->second == lColour
lColour
类型在哪里COLOUR
不,你所做的并不安全。过去的迭代器(返回的那个end()
)不能被取消引用。您正在->
对find()
: 的结果进行处理,如果该结果是过去的,那么您正在调用未定义的行为。
不。
在尝试获取第二个元素之前,您应该检查 find != end 返回的迭代器。
const auto& point_color = this->mBoard.find(Point(p.x - 1, p.y);
if (point_color != this->mBoard.end() &&
point_color->second == lColour) {
// something
}
不,这不是因为这意味着取消引用结束迭代器,这是未定义的行为。