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异常还是这是正确的行为?
这是正确的行为 - 您传递的索引是新字符插入点后面的位置索引,而不是之前的位置.事实上,C++ 03标准明确指出(§21.3.5.4/ 2):
需要
pos1 <= size()和pos2 <= str.size()
(pos1你传递的指数在哪里,pos2 == npos你调用的超载) - 注意它<=不是<.