在 C++ 中 reference std::string
中的 c_str()
出现以下内容:
Return value
Pointer to the underlying character storage.
data()[i] == operator[](i) for every i in [0, size())
(until C++11)
data() + i == &operator[](i) for every i in [0, size()]
(since C++11)
我不明白两者之间的区别,除了自 C++11 以来范围增加了一个元素。
前一条语句data()[i] == operator[](i)
对后者不也成立吗?
最佳答案
除了从C++11开始范围增加一个元素外,还有很大的区别:
data()[i] == operator[](i)
和:
data() + i == &operator[](i)
主要区别在于原型(prototype)中的 &
运算符。
旧原型(prototype)允许在发生写操作时进行复制,因为返回的指针可能指向另一个缓冲区,而不是保存原始字符串的缓冲区。
data()[i]
和 data() + i
之间原型(prototype)的另一个区别并不重要,因为它们是 equivalent .
C++ 和 C++11 之间的区别在于,在前者中,标准没有明确指定 std::string
是否有空终止符。然而,在后者中,这是指定的。
换句话说:Will std::string always be null-terminated in C++11?是的。
关于c++ - C++03和C++11在c_str函数规范上的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782237/