2017-01-13 3 views
0

Я знаю, что x += y эквивалентно x = x + y. Есть ли операция, которая эквивалентна x = y + x. Например, с помощью этой операции, чтобы объединить x и y, где x и y являются "1" и "2", сделает x, равным "21", а не "12"?Есть ли операция строки, подобная `+ =`, но добавляет к фронту строки?

Самый простой способ добиться добавления строки на месте?

+0

Вы не можете перегружать операции для основных типов. Но вы можете объявить класс, который будет имитировать целые числа, а для объектов этого класса вы можете перегрузить операцию по своему усмотрению. Однако вы не можете вводить новых операторов. Вы можете перегрузить операторы, которые уже существуют на этом языке. –

+0

@NathanOliver Я имел в виду как струны !!! Сейчас я отредактирую. – theo2003

+1

@ theo2003: Ничто в C++ не позволяет вам перегружать 'x + = y' как' x = y + x'. Это не очень хорошая практика, но вы можете это сделать. Отвечает ли это на ваш вопрос? – AnT

ответ

2

По-видимому, вопрос заключается не столько в определении операторов, сколько в вставке одной строки в другую. В этом случае std::string имеет целую связку insert member functions для этого.

В частности, чтобы вставить строку y в передней части строки x вы можете использовать x.insert(0, y);

1

Используя тип помощника, вы можете сделать следующую работу, где x и y являются существующим типом, как std::string:

x +prefix= y; 

Кредита для этого «назвали операторы» подхода идет к Yakk, вы можете найти более полное обсуждение с примерами реализации на https://github.com/klmr/named-operator.

+0

Спасибо, я просто задавался вопросом, возможно ли это с помощью простого решения, я думаю, было бы проще просто сделать это без операторов быстрого доступа. В любом случае спасибо. – theo2003

1

Несомненно, создайте свой собственный тип и перегрузите оператор +=. то есть:

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; 
} 
+0

Я спрашивал, возможно ли это простым способом, но спасибо в любом случае! – theo2003

Смежные вопросы