string :: insert在string的末尾

Iro*_*san 3 c++ language-lawyer

以下两行在Visual Studio 2005中执行相同的操作:

myString.insert(myString.size(),1,myNewChar);
Run Code Online (Sandbox Code Playgroud)

myString.append(1,myNewChar);
Run Code Online (Sandbox Code Playgroud)

是第一个应该抛出out_of_range异常还是这是正确的行为?

ild*_*arn 5

这是正确的行为 - 您传递的索引是新字符插入点后面的位置索引,而不是之前的位置.事实上,C++ 03标准明确指出(§21.3.5.4/ 2):

需要pos1 <= size()pos2 <= str.size()

(pos1你传递的指数在哪里,pos2 == npos你调用的超载) - 注意它<=不是<.