偶然我遇到了以下情况:
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
错误地将整数赋给a !
例如,在我的情况下i
是早先的a string
,然后我转换为int
。该代码仍在编译,但由于其对整体代码的明显不良影响,该程序崩溃了。
如果是这样,将避免这种情况:
string& operator=(const _CharT& c);
没有上述版本的背后动机是什么?
没有上述版本的背后动机是什么?
它不能解决问题(您认为它无法正常工作),并且速度会更慢。
在大多数体系结构中,按值传递char
(或(或wchar_t
或char32_t
)值比创建引用然后通过引用进行访问要快,这是因为它需要传递指针大小的对象(char
在64位系统上,通常比a大,并且也可能大于a)。大于wchar_t
),然后通过指针进行间接操作。
因此,它不能解决您要解决的问题,只会使代码变慢。双坏。
C ++允许将int转换为char,因此建议的重载只会创建该临时文件,然后将对其进行绑定。有关更好的“修复”,请参见http://open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2372,该修复有其自身的问题,可能不会发生。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句