Каково использование передающих ссылок константы на типы примитивов?

вы должны использовать

double g=1.0/3;

или

double g=1/3.0;

Целочисленное деление возвращает целое число.

15
задан sharptooth 23 March 2009 в 14:24
поделиться

6 ответов

Различие - то, что, если Вы получаете тот результат в ссылку сами, можно отследить замены целочисленных членских переменной в собственном имени переменной, не вспоминая функции.

const &int x = myObject.getFoo();
cout<<x<<endl;
//...
cout<<x<<endl;//x might have changed

Это - вероятно, не лучшее проектное решение, и очень опасно возвратить ссылку (константа или не), в случае, если переменная, которая освобождена от объема, возвращается. Таким образом, если Вы возвращаете ссылку, стараться быть уверенными, что это не переменная, которая выходит из объема.

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

void test1(int x)
{
  cout<<x<<endl;//prints 1
}

void test2(const int &x)
{
  cout<<x<<endl;//prints 1 or something else possibly, another thread could have changed x
}

int main(int argc, char**argv)
{
  int x = 1;
  test1(x);
  //...
  test2(x);
  return 0;
}

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

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

Мне, передавая ссылку константы для примитивов ошибка. Или необходимо изменить значение, и в этом случае Вы передаете ссылку неконстанты, или просто необходимо получить доступ к значению, и в этом случае Вы передаете константу.

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

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

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

Нет большого преимущества. Я видел это в платформе, или макрос генерировал методы считывания и методы set прежде. Макро-код не различал примитив и типы не-POD и просто используемый const type& через управление по методам set. Я сомневаюсь, что это - проблема эффективности или подлинное недоразумение; возможности, это - проблема непротиворечивости.

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

Нет никакого смысла и преимущества кроме

void MyClass::setFoo(const int foo)
void MyClass::setFoo(const int& foo)

как тогда, Вы не будете в состоянии снова использовать переменную 'нечто' внутри 'setFoo' реализация. И я верю этому 'int&'; просто, потому что Guy просто привыкает для передачи всех вещей ссылкой константы и нет ничего неправильно с этим.

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

Основное различие между возвратом значения и возвратом ссылки константы - то, что Вы тогда можете const_cast, что ссылка и изменяет значение.

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

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

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

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

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