我注意到
std::string str;
str += 'b'; // works
str.append('b'); // does not work
str.append(1, 'b'); // works, but not as nice as the previous
为什么append
方法不支持追加单个字符?我原以为operator+=
实际上是append
方法的包装器,但事实并非如此。
operator+=()
旨在处理所有简单情况(仅使用一个参数),而append()
用于需要多个参数的情况。append( const basic_string& str )
和append( const CharT* s )
的存在,而不是append( CharT c )
的缺失。append()
添加单参数整数类型重载或构造函数(根据设计,已经有几个整数类型重载)可能会引入歧义。append
形式;string& append( size_type count, CharT ch );
basic_string( size_type count,
CharT ch,
const Allocator& alloc = Allocator() );
resize( size_type count, CharT ch );
。str.append('b');
的特定用例(和重载),或者认为已经有足够的替代方法了。int
和字符char
对应(在某些平台上可能是这样),那么引入单个重载就可能会导致歧义。str.append("b");
。虽然不完全相同,但效果相同。operator+=
push_back()
,与其他标准容器一致append
中添加适当的重载/签名来满足它。
append
签名;一个可能的解决方案是反转count
和char
的顺序(可能添加一个默认值)。string& append(CharT ch, size_type count = 1);
basic_string
的批评所描述的那样,是移除append
,有许多方法可以实现它的功能。
std::string::append(char)
。如果你想这样做,请使用+=
。 - Mats Peterssonstd::string::append(count, char)
,其中count=1
或者std::string::push_back(char)
。 - Simon Kraemerchar
只是另一种整数类型。 在某些平台上,sizeof(char)
和sizeof(int)
实际上可能是相同的。看看std::string
构造函数和append()
重载列表。拥有一个接受单个整数值的重载可能会有些容易出错--而且您还有语义相同的选项,例如std::string("b")
、append("b")
、operator+=("b")
和operator+=('b')
。+=
只有一个整数重载。 - DevSolar