几天前我遇到了一个微妙的错误,代码看起来像这样:
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 *
,那么ostringstream
usingends
不仅是多余的,而且有潜在的危险,我正在考虑将它们全部从我的客户代码中删除。
ends
任何人都可以看到在std::string
唯一环境中使用的明显理由吗?