Возврат по значению в получателях для классов Qt - PullRequest
0 голосов
/ 31 декабря 2018

Я не могу понять, как лучше всего возвращать значения для членов класса от геттеров.

QtCreator может генерировать геттеры автоматически.Например, для члена класса QString m_string будет создана следующая функция:

QString string() const;

Правильно ли, что получатель возвращает члена класса QString по значению?Это дешево?Будет ли лучше, если я напишу это:

const QString &string() const;

1 Ответ

0 голосов
/ 31 декабря 2018

Было бы лучше, если я напишу это

"Лучше" субъективно.Вы установили это, чтобы быть проблемой производительности?Потому что, как правило, необоснованные микрооптимизации считаются плохой практикой программирования.

У CoW есть небольшие накладные расходы, но если вы не докажете, что это создает проблему для вас, это не должно вызывать беспокойства.Если бы предложенный вами метод был лучше, я уверен, что Qt использовал бы этот формат для автоматической генерации геттеров, а также предложил бы его в документации.

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

Формат, используемый Qt, более универсален,например, ваш формат может быть проблематичным, если вы хотите использовать это свойство из QML, которое может не поддерживать строковые ссылки и еще не делегирует правильность констант из C ++.

Кроме того, возврат изменяемой ссылки открывает дверьизменять свойства объекта без прохождения правильного пути к коду, который также уведомит об изменении, что может иметь неблагоприятные побочные эффекты, если ваш код отслеживает изменения данных и реагирует на них.Я предполагаю, что вы имеете в виду свойства здесь, поскольку вы говорите об автоматически генерируемых методах получения, а не о простых членах класса.

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