【发布时间】:2011-06-08 20:56:20
【问题描述】:
以下两行代码在 Visual Studio 2005 中做同样的事情:
myString.insert(myString.size(),1,myNewChar);
和
myString.append(1,myNewChar);
第一个应该抛出 out_of_range 异常还是这是正确的行为?
【问题讨论】:
标签: c++ language-lawyer
以下两行代码在 Visual Studio 2005 中做同样的事情:
myString.insert(myString.size(),1,myNewChar);
和
myString.append(1,myNewChar);
第一个应该抛出 out_of_range 异常还是这是正确的行为?
【问题讨论】:
标签: c++ language-lawyer
这是正确的行为——您传递的索引是新字符插入点之后位置的索引,而不是之前。事实上,C++03 标准中明确表示(§21.3.5.4/2):
需要
pos1 <= size()和pos2 <= str.size()
(其中pos1 是您传递的索引,pos2 == npos 在您调用的重载中)- 请注意它是<= 而不是<。
【讨论】: