作者:神秘的绝代双角 | 来源:互联网 | 2022-12-03 12:35
1> StoryTeller ..:
迭代器指向同一个键
不,他们没有.m.end()--;
是减少后.它的语义是减少m.end()
作为副作用的返回值,但返回原始值不变.因此it1 == m.end()
,您通过解除引用来获得未定义的行为.
由于operator++
作为用户定义类型(迭代器)的成员函数的不幸副作用,它成功编译.您甚至可以在r值上调用它m.end()
,而内置的后递减期望l值.
因此即使迭代器模型指针,它们也不完全相同.相比之下,这个程序:
char* foo();
int main() {
foo()--;
}
会产生错误foo()--
,因为foo()
是一个r值指针,我们不能减少它.