迭代器是c++中用于遍历容器中的元素的数据类型,但是今天在使用vs2015进行调试的时候,发现对于c++的容器的实现,vs 2015与vc++ 6.0有很大的差异,应该是使用vs进行编译时的一个漏洞吧。
问题起源
关于下面的代码,在vs 2015和vc++ 6.0两个平台上的运行结果大不相同。
#include<string>
#include<iostream>
using namespace std;
void main() {
string start = "ASD";
string::iterator a = start.begin();
printf("%x,%x,%x\n", a,*a,*a);
getchar();
}
在以往使用迭代器的时候,笔者总是使用cout进行输出,但是今天由于一些格式上的原因使用了printf对内容进行输出,但是输出结果与预期差异过大。按照笔者分析,使用printf进行输出,三个内容应该依次为 迭代器指向的地址,’A’的十六进制,’A’的十六进制。但是最后的输出结果却如图所示:
vc++的输