为什么 string::begin() 在立即窗口中输出整个字符串

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() 在立即窗口中输出整个字符串。为什么会这样?

Nat*_*ica 5

这是因为调试器试图提供帮助。 ptr在迭代器中将是 achar*并且通常当您有 a 时char*,您有一个 c 字符串并且您想查看字符串的全部内容,而不仅仅是指针指向的内容。这就是为什么您会看到完整内容而不仅仅是a. 如果您查看,begin() + 1那么您将看到bc内容,因为现在指针指向b.