无意中我遇到了以下情况:
int i = 1000;
string s;
s = i; // ok, but value of `s` is not 1000!
这种情况是由string
标准库中的以下运算符创建的:
string& string::operator=(_CharT __c)
{
this->assign(1, __c);
return *this;
}
现在,这会产生一种不必要的不良影响,偶然我们可能最终将整数分配给string
,并带有错误值!
例如,在我的情况下,i
早于string
,然后我转换为int
。代码仍然编译但程序崩溃,因为它对整体代码有明显的不良影响。
如果是这样的话,将避免这种情况:
string& operator=(const _CharT& c);
没有上述版本的动机是什么?
答案 0 :(得分:2)
没有上述版本的动机是什么?
它不能解决问题(它不会影响您的工作方式)而且速度会慢一些。
在大多数体系结构上传递char
(或甚至wchar_t
或char32_t
)比在创建引用然后通过引用访问更快,因为它需要传递指针 - size对象(通常大于char
并且在64位系统上可能也大于wchar_t
)然后通过指针进行间接处理。
因此,它无法解决您尝试修复的问题,只会使代码变慢。双坏。
C ++允许int转换为char,因此建议的重载只会创建临时的,然后绑定对它的引用。请参阅http://open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2372以获得更好的“修复”,它有自己的问题,可能不会发生。