У меня есть класс String, и я хочу перегрузить +, чтобы добавить два указателя String*.
Почему?
что-то вроде этого не работает:
Оператор String*+(String* s1, String* s2);
Это основная функциональность С++. Вы не можете изменить это так.
Есть ли способ избежать передачи по ссылке.
Вы можете передавать по ссылке, указателю или значению.
По значению неэффективен (поскольку временные объекты создаются и копируются без уважительной причины*).
По указателям в этом случае нельзя использовать (добавление указателей — это основная функциональность языка). На самом деле в язык были добавлены ссылки, чтобы совместить эффективность передачи указателей в качестве аргументов (к перегруженным операторам) с удобным синтаксисом передачи значений. Другими словами, ссылки — это языковая функция, созданная с учетом конкретной ситуации. Они являются оптимальным решением.
По ссылке — это обычно принятое решение. Не могли бы вы рассказать нам, почему это не хорошо в вашей ситуации?
Рассмотрим этот пример:
Строка* s1 = новая строка ("Привет"); Строка* s2 = новая строка ("Мир");
Строка* s3 = s1 + s2;
Это похоже на код Java или C#, переведенный в синтаксис C++. Не делайте этого. Этот менталитет называется «Я могу программировать на C на любом языке», и обычно он сочетает врожденные проблемы любого менталитета, который вы пытаетесь перенести на C++, с присущими C++ проблемами, без преимуществ ни того, ни другого.
Я не говорю, что вы это делаете, я просто говорю, что вы этого еще не делаете :).
Мне нужно такое дополнение для работы. Пожалуйста, предложите.
Вы можете определить дополнительный класс интеллектуальных указателей для хранения ваших строк. Для этого не нужно делать многого (достаточно будет struct ptr { String* _value; /* add your syntax sugar and operators here */ }
. Тем не менее, по-прежнему плохая идея делать это только ради добавления указателей.
person
utnapistim
schedule
14.06.2010