2012-01-29 47 views
2

只读21.3.6.1 basic_string :: find - 并且没有提到pos参数在字符串本身的范围内。是否std :: string查找要求pos小于字符串大小?

21.3.6.1 basic_string的::找到

SIZE_TYPE查找(常量basic_string的& STR, SIZE_TYPE POS = 0)常量;

1种效果:确定最低位置XPOS,如果可能的话,使得 下列条件都得到:

- POS < = XPOS和XPOS + str.size()< =尺寸();

- 在(XPOS + I)== str.at(I)用于I由STR控制 字符串的所有元素。

2返回:XPOS如果函数可以确定XPOS这样的值。 否则,返回npos。

我正确读呢?

+0

为了公平起见,你可以只尝试... – 2012-01-29 21:53:21

+5

@DrG:你会在实验中观察到的行为会告诉你什么有关行为是否被定义良好/便携/等。 – 2012-01-29 21:56:09

回答

6

规范的措辞并不要求pos小于字符串的长度。如果pos大于字符串,则条件的第一部分的长度大于(1)不能满足的,因为如果pos <= xpos,然后xpos + str.size() <= size()可以永远不会为真。因此,通过条款(2),该功能将返回npos。因此,如果索引超出范围,函数的行为仍然完美定义。

希望这会有所帮助!

相关问题