为什么字符串构造函数(s,pos)异常是“pos > s.size()”而不是“pos >= s.size()”?

yap*_*m01 4 c++ c++20

示例如下:

string s1 = "abcde";
string s2(s1, s1.size()); // s1.size() = 5.
Run Code Online (Sandbox Code Playgroud)

请注意,s1.size() = 5 且最后允许的索引 = 4(对于字符“e”)。上面的代码运行良好,返回空字符串。仅当 pos = 6 时,它才会失败,并出现超出范围的异常。为什么?

根据 cppe 参考网站:

例外
3) std::out_of_range 如果 pos > other.size()

正确的异常不应该是“if pos >= other.size()”吗?

Ted*_*gmo 8

自 C++11 起,s1[s1.size()]需要 才能工作并将返回对'\0'字符串末尾的 的引用。然而,将 更改'\0'为其他内容会导致未定义的行为。但是您可以在那里写作'\0'