gpt4 book ai didi

c++ - c_str 是否总是返回相同的地址?

转载 作者:行者123 更新时间:2023-11-30 01:42:46 27 4
gpt4 key购买 nike

我知道 C++11 对 string 做了很多改变。其中最重要的是要求它在内存中线性布局。

在 C++11 之前,对 string::c_str 的调用将返回一个 const char*,但是否保证是同一个。例如,给定 string foo,这是否保证为真,或者它们可能返回不同的地址?

foo.c_str() == foo.c_str()

编辑: 我应该附加一点,我想问的是,只要 上没有调用任何方法,string::c_str 的返回值是否始终一致>foo 这会使它的迭代器失效。

最佳答案

编辑:阅读标准中的同一段落,我现在得出结论,允许对方法 data()/c_str() 的后续调用使先前返回的指针无效(即使您没有做了其他任何事情),所以你的问题的答案将是,多么讽刺。

原答案:

是的,只要您对对象执行的唯一非常量操作是operator[]atbegin、< strong>rbegin、endrend

data()/c_str() 返回指向字符串第一个元素的指针。请参阅标准 (N1905),第 13 页。 21.3 [类模板basic_string]:

  1. References, pointers, and iterators referring to the elements of a basic_string sequence may be invalidated by the following uses of that basic_string object:

— As an argument to non-member functions swap() (21.3.7.8), operator>>() (21.3.7.9), and getline() (21.3.7.9).

— As an argument to basic_string::swap().

— Calling data() and c_str() member functions.

— Calling non-const member functions, except operator[], at, begin, rbegin, end, and rend.

— Following construction or any of the above uses, except the forms of insert and erase that return iterators, the first call to non-const member functions operator[], at, begin, rbegin, end, or rend.

关于c++ - c_str 是否总是返回相同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023367/

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