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

问题描述 投票:0回答:1

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

c++ string iterator visual-studio-2019
1个回答
0
投票

这是因为编译器正在尝试提供帮助。迭代器中的ptr将为char*,通常,当您具有char*时,您将拥有一个c字符串,并且希望查看字符串的全部内容,而不仅仅是指针指向的内容。这就是为什么您看到全部内容而不仅仅是a的原因。如果您查看了begin() + 1,那么您会看到bc作为内容,因为现在指针指向b

© www.soinside.com 2019 - 2024. All rights reserved.