Рассмотрим этот код:"std :: string" или "const std :: string &" аргумент? (Аргумент внутренне скопирована и изменена)
void doSomethingWithString(string& mString)
{
// mString gets modified in here
}
string getCopy1(const string& mString)
{
string result{mString}; doSomethingWithString(result); return result;
}
string getCopy2(string mString)
{
doSomethingWithString(mString); return mString;
}
Между getCopy1
и getCopy2
, чем одно:
- ясно показывает, что переданная строка не собирается модифицируются
- Очевидно, что пользователь получит новую строку, возвращаемую
- Быстрее/может быть лучше оптимизировано компилятором (включен C++ 11, рассмотрим семантику перемещения)
?
Не знаете, в чем вопрос. Вы не согласны с ответом? –
@ KonradRudolph Вопросы - это три перечисленные точки. В принципе, и getCopy1, и getCopy2 делают то же самое - что быстрее и выразительнее? –
Бесстыдный штекер: см. Http://stackoverflow.com/questions/16944715/constructor-parameter-style/ - Я смущаюсь отмечать вопрос как дублирующийся, потому что другой конкретно посвящен конструкторам (и инициализации переменных-членов из параметра) и есть другие незначительные отличия, но большая картина такая же. – syam