几天前我遇到了一个微妙的错误,代码看起来像这样:
ostringstream ss;
int anInt( 7 );
ss << anInt << "HABITS";
ss << ends;
string theWholeLot = ss.str();
问题是ends'\0' 粘贴到实际看起来像这样ostringstream(即最后为空)theWholeLot"7HABITS\0"
现在这还没有出现,因为theWholeLot当时它被用来获取const char *部分,string::c_str()这意味着 null 被屏蔽了,因为它只是一个分隔符。然而,当它改为使用字符串时,null 突然意味着一些东西和比较,例如:
if ( theWholeLot == "7HABITS" )
会失败。这让我想到:大概的原因ends是回到ostrstream流通常不以 null 终止并且必须这样str()(然后抛出不是 astring而是 a char *)才能正常工作的日子。
但是,既然不可能从 a 中剔除 a char *,那么ostringstreamusingends不仅是多余的,而且有潜在的危险,我正在考虑将它们全部从我的客户代码中删除。
ends任何人都可以看到在std::string唯一环境中使用的明显理由吗?