Какой предпочтен, возвратите константу double& ИЛИ возврат дважды

Я использую это эмпирическое правило:

  1. Атрибут - что-то, что является автономным, т.е. цвет, идентификатор, имя.
  2. Элемент - что-то, что делает или могло иметь собственные атрибуты или содержать другие элементы.

Настолько Ваш близок. Я сделал бы что-то как:

РЕДАКТИРОВАНИЕ : Обновленный исходный пример на основе обратной связи ниже.

  <ITEM serialNumber="something">
      <BARCODE encoding="Code39">something</BARCODE>
      <LOCATION>XYX</LOCATION>
      <TYPE modelNumber="something">
         <VENDOR>YYZ</VENDOR>
      </TYPE>
   </ITEM>
5
задан lyxera 6 November 2009 в 02:09
поделиться

8 ответов

Я бы не стал этого делать:

double& state() { return m_state; }

Вы также можете сделать m_state публичным, если вы это сделаете. Вероятно, наиболее разумным является следующее:

const double & state() const { return m_state; }

Опять же, когда вы говорите о сохранении копии 64-битной переменной (то есть микрооптимизации) и о том факте, что последняя версия может быть преобразована во все, что вы хотите, я просто скопировал бы его:

double state() const { return m_state; }

(в любом случае нет никакой реальной защиты)

6
ответ дан 14 December 2019 в 01:10
поделиться

Имеет смысл просто возвращать двойное значение. Потому что вы не возвращаете ссылку на более сложный объект. Вероятно, это будет сделано в регистрах, поэтому это будет немного быстрее. Если вы действительно хотите вернуть ссылку, сделайте ее const const.

Практическое правило: простые типы просто возвращают их. Объекты - по ссылке. Все остальное - ненужная сложность.

1
ответ дан 14 December 2019 в 01:10
поделиться

Для чего-то вроде двойного подойдет просто выполнение double state () const {...} , копирование выполняется быстро, вам и вызывающему не нужно беспокоиться о том, можно ли изменить возвращаемое значение, и его можно вызвать из константной или неконстантной ссылки на объект.

Для чего-то более сложного, например object это действительно зависит от того, хотите ли вы, чтобы вызывающий имел возможность изменять его, возможно, вы хотите, чтобы они могли вызывать неконстантные члены, если они получают объект. В таком случае MyClass & state () const {...} - ваш лучший выбор.

1
ответ дан 14 December 2019 в 01:10
поделиться

Вы пытаетесь создать свойство, подобное структуре? Если да, то почему бы вам не использовать getState () и setState (...) ?

0
ответ дан 14 December 2019 в 01:10
поделиться

В других ответах рассматривались последствия любого подхода для удобства чтения и гигиены кода.

Что касается производительности на современных архитектурах x86, если функция является встроенной, в любом случае это не имеет значения. Если функция не является встроенной, существует tiny преимущество в возврате double , а не const double & , потому что double просто возвращается в регистре, тогда как ссылка возвращает указатель, который затем должен быть загружен. Но стоимость одного цикла полностью перекрывается штрафом за наличие не встроенной функции.

0
ответ дан 14 December 2019 в 01:10
поделиться

Я бы сказал, что предпочтительнее вторая версия:

const double& state() const { return m_state; } // returns const double&

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

0
ответ дан 14 December 2019 в 01:10
поделиться

Мои предложения:

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

Ознакомьтесь с эффективной темой C ++ на это Скотт Майерс.

0
ответ дан 14 December 2019 в 01:10
поделиться

Практическое правило:

  • встроенное (int, double, pointer) -> значение
  • определенное пользователем -> ссылка на константу

Применяется следующее предостережение: если вы знаете, что такое POD (обычные старые данные), и у вас есть один разумного размера, вы можете вернуть его, указав значение .

1
ответ дан 14 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: