当我们在Visual Studio IDE中执行string :: begin()时,它将返回一个指向字符串中第一个字符的迭代器。但是,当我们在即时窗口(或“监视”窗口)中键入string :: begin()时,它将返回整个字符串。为什么会这样呢?立即窗口不应以这种方式运行,因为string :: begin()返回的是迭代器,而不是字符串。
以下是Visual Studio IDE中的代码:
int main()
{
string s = "abc";
string::iterator it = s.begin();
cout << *it << endl;
return 0;
}
以下是输出:一个
但是,如果我们在立即窗口中键入s.begin(),则会得到以下输出:
s.begin()
"abc"
[ptr]: 0x0133fd08 "abc"
[Raw View]: {...}
立即窗口中s.begin()的结果应为:它应输出指向字符串中第一个元素的迭代器(即,应输出指向'a'的迭代器)。但是s.begin()在立即窗口中输出整个字符串。为什么会这样?
这是因为编译器正在尝试提供帮助。迭代器中的ptr
将为char*
,通常,当您具有char*
时,您将拥有一个c字符串,并且希望查看字符串的全部内容,而不仅仅是指针指向的内容。这就是为什么您看到全部内容而不仅仅是a
的原因。如果您查看了begin() + 1
,那么您会看到bc
作为内容,因为现在指针指向b
。