有人问了这个问题,关于字符串拼接。代码string s; s = s + 2;
无法编译通过。人们给出的答案说明operator+
是一个模板函数,而operator+=
不是,所以自动下转换(int(2)
到char(2)
)没有被应用。
函数原型如下
template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string{
basic_string&
operator+=(_CharT __c);
};
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs);
为什么编译器不能只使用这个原型,并将int(2)强制转换为char(2)?
basic_string<char, _T, _A> operator+(const basic_string<char, _T, _A>, char);
编译器(G++ 6.3.0)报错,提示
[Note] deduced conflicting types for parameter '_CharT' ('char' and 'int')
basic_string
所支持的所有标准类型专门定制模板。另外,string s; s = s + 2;
没有太多意义。你想要值为2的ASCII字符还是想要'2'
?我看不出为什么你需要你的版本。 - NathanOliver