C ++ перегрузка + оператор для того, чтобы всегда объединять строки любого рода - PullRequest
1 голос
/ 06 декабря 2010

Это очень бессмысленно и неприятно, что каждый раз, когда вам нужно объединить две строки, необходимо сделать как минимум:

std::string mystr = std::string("Hello") + " World";

Я хотел бы перегрузить оператор + и использовать его для того, чтобы всегда выполнять конкат между символами * таким образом:

std::string mystr = "Ciao " + "Mondo".

Как бы вы поступили? Я хотел бы найти лучшую практику. Спасибо ...

Ах, у Boost есть что-то, чтобы решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 06 декабря 2010

Вы не можете заставить + работать так.Чтобы определить перегрузку оператора, по крайней мере, один из операндов должен быть пользовательского типа.

Однако, функциональность встроена: если вы просто соедините два строковых литерала вместе "like" "this", они автоматически будутобъединены во время компиляции.

2 голосов
/ 06 декабря 2010

Вы не можете. Нет способа перегрузить операторы между встроенными типами. Я также не уверен, почему это так "хлопотно". Если вы выполняете много строковых операций, то один или оба параметра будут уже иметь тип std::string.

.
1 голос
/ 06 декабря 2010

Вы не можете.Подумайте об этом - что такое "Чао" и "Мондо" на самом деле?Это статические массивы символов.Вы не можете добавлять статические массивы вместе, так как компилятор укажет следующий код:

#include <iostream>

int main()
{
  std::string mystr = "Ciao " + "Mondo";
  std::cout << mystr << std::endl;
  return 0;
}

(вывод:

In function 'int main()':
Line 5: error: invalid operands of types 'const char [6]' and 'const char [6]' to binary 'operator+'

Вот и все. Это в значительной степениdupe of: const char * сцепление .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...