gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:51:14 24 4
gpt4 key购买 nike

当我们在 Visual Studio IDE 中执行 string::begin() 时,它会返回一个指向字符串中第一个字符的迭代器。但是,当我们在直接窗口(或监 window 口)中键入 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

关于c++ - 为什么 string::begin() 在立即窗口中输出整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com