c++ - 在 std::string 中,字符串位置大于它的大小,C++ 访问元素

  显示原文与译文双语对照的内容

在 std:: string中,如果我们访问一个元素 (element position)> (size of string) 标准表示它返回一个对 charT 类型的对象的引用,该对象的值为 charT()


const_reference operator[](size_type pos) const;


reference operator[](size_type pos);



期望:pos <= size() 。

返回:*(begin() + pos如果 pos <size() 。 否则,返回对类型的对象的引用,该对象的值图表( ) 将对象修改到 charT()的任何值。

http://eel.is/c++draft/strings#string.access-1

不幸的是,我无法理解这一点,如果它是未定义的行为,它会更好。

谁能解释这背后的基本原理?

时间:

你必须考虑完整的规格。

首先:

期望:pos <= size() 。

如果你不遵循你没有定义的前提,无论如何。 那么。

返回:*(begin() + pos如果 pos <size() 。 否则,返回对类型的对象的引用,该对象的值图表( ) 将对象修改到 charT()的任何值。

"否则"引用的唯一( 有效) 案例是 pos == size() 。 这可能是模拟具有 some_string[size] 元素的c 字符串行为,该元素可以被访问。 请注意,charT() 通常只是 ''

你可能认为,为了实现规范,operator[] 必须检查 pos == size 。 然而,如果底层字符 array 在字符串的末尾有一个 charT(),那么你得到的行为基本上是免费的。 因此,与"常用"访问 array 有点区别的实际上只是。

...