Vik*_*ngh 4 c++ string iterator visual-studio-2019
当我们在 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;
}
Run Code Online (Sandbox Code Playgroud)
以下是输出:
但是,如果我们在立即窗口中输入 s.begin() ,我们会得到以下输出:
s.begin()
"abc"
[ptr]: 0x0133fd08 "abc"
[Raw View]: {...}
Run Code Online (Sandbox Code Playgroud)
s.begin() 在立即窗口中的结果应该是: 它应该输出一个指向字符串中第一个元素的迭代器(即它应该输出一个指向'a'的迭代器)。但是 s.begin() 在立即窗口中输出整个字符串。为什么会这样?
这是因为调试器试图提供帮助。 ptr在迭代器中将是 achar*并且通常当您有 a 时char*,您有一个 c 字符串并且您想查看字符串的全部内容,而不仅仅是指针指向的内容。这就是为什么您会看到完整内容而不仅仅是a. 如果您查看,begin() + 1那么您将看到bc内容,因为现在指针指向b.