string.assign产生异常后string=""会有什么后果?

Soft_micro 2006-06-22 03:53:43
string str("aaa");
str.assign(str,str.find('b'),str.length());
str = "";
...全文
458 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireseed 2006-06-23
  • 打赏
  • 举报
回复
你应该尽量避免你的程序产生异常,而不是在产生异常后来捕捉它!
Soft_micro 2006-06-23
  • 打赏
  • 举报
回复
改为这样呢:
string str("aaa");
try{
str.assign(str,str.find('b'),str.length());
}catch(...)
{
}
str = "";
fireseed 2006-06-22
  • 打赏
  • 举报
回复
find函数如果没找到会返回size_t(-1)

assign函数有多个重载,按照楼主的调用方式,会被匹配到下的assign函数
basic_string& assign(
const basic_string& _Str,
size_type off,
size_type _Count
);
其中off是源串的偏移量,看一下它的实现代码(MS VC8.0):
_Myt& __CLR_OR_THIS_CALL assign(const _Myt& _Right,
size_type _Roff, size_type _Count)
{ // assign _Right [_Roff, _Roff + _Count)
if (_Right.size() < _Roff) // 如果你给的偏移量大于源串的大小
_String_base::_Xran(); // 直接抛出异常
……

/////////////////////////////////////////////

_MRTIMP2 void __cdecl _String_base::_Xlen() // 抛出异常的实现
{ // report a length_error
_THROW_NCEE(length_error, "string too long");
}

/////////////////////////////////////////////
所以你最好这样用:

string str("aaa");
size_t nOff = str.find('b');
if ( nOff != string::npos )
{
str.assign(str, nOff,str.length());
}

str = "";
fireseed 2006-06-22
  • 打赏
  • 举报
回复
string str("aaa");
str.assign(str,str.find('b'),str.length());
str = "";

assign 异常后,你的程序就和你说bey bey了
Soft_micro 2006-06-22
  • 打赏
  • 举报
回复
没人知道?

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧