有没有类似`+=`但是加到字符串前面的字符串操作?

Is there a string operation similar to `+=` but adds to the front of the string?

我知道 x += y 等同于 x = x + y。有没有等价于x = y + x的操作?例如,使用此操作组合 xy,其中 xy"1""2",将使得 x等于"21",不是"12"

实现就地前置字符串的最简单方法是什么?

通过使用辅助类型,您可以完成以下工作,其中 xy 是现有类型,例如 std::string:

x +prefix= y;

此 "named operators" 方法归功于 Yakk,您可以在 https://github.com/klmr/named-operator.

找到更完整的讨论和实施示例

当然,创建您自己的类型和重载运算符 +=。即:

struct MyString 
{
    std::string _string;

    MyString(const std::string & str) : _string(str) {}
    MyString(std::string && str) : _string(std::move(str)) { }

    void operator+=(const MyString & rhs)
    {
        _string = rhs._string + _string;
    }
};

int main()
{
    MyString abc("abc");
    MyString xyz("xyz");

    abc += xyz;

    std::cout << abc._string;
}

显然问题不在于定义运算符,而在于将一个字符串插入另一个字符串。在这种情况下,std::string 有一大堆 insert member functions 可以做到这一点。

具体来说,要在字符串 x 的前面插入字符串 y,您可以使用 x.insert(0, y);