【发布时间】:2016-08-18 16:35:34
【问题描述】:
我知道 C++11 对string 做了很多更改。其中最重要的是要求它在内存中线性布局。
在 C++11 之前,对 string::c_str 的调用将返回 const char*,但它保证是相同的。例如,给定string foo,这是否保证为真,或者它们可能返回不同的地址?
foo.c_str() == foo.c_str()
编辑:我应该附加一下,只要foo 上没有调用任何会使其迭代器无效的方法,我应该询问string::c_str 的返回是否总是一致的。
【问题讨论】:
-
也可能是跨站点重复:programmers.stackexchange.com/a/125149/17853(不过我相信 SO 上也有很多)
-
“在 C++11 之前,对 string::c_str 的调用会返回一个 const char* 但它保证是同一个” 这是错误的说法。
c_str的结果可能在任何非常量函数之后发生变化。例如,尝试将一个长(比如 2048chars)字符串附加到您最初的短字符串 -
@mvidelgauz 我认为他的意思是“同一个”,没有迭代器失效(即:通过调用非常量成员函数)
-
你为什么想要或需要依赖它是一样的?
-
@KABoissonneault 那么答案应该是肯定的——只要没有在对象内部缓冲区上调用非常量函数就不会重新定位,并且在 C++11 之前也得到保证——@ 的结果987654331@ 在第一次(可能的)突变之前有效
标签: c++ string c-strings c++03