Вопрос про const reference
От: Максим Рогожин Россия  
Дата: 12.03.18 16:54
Оценка: :)))
Никогда вроде бы не встречал раньше такого:
const double &r = 0.1;

Скажите, пожалуйста, стандартом разрешается создавать ссылку на константу?
Re: Вопрос про const reference
От: Анатолий Широков СССР  
Дата: 12.03.18 17:19
Оценка: +2
Здравствуйте, Максим Рогожин, Вы писали:

МР>Никогда вроде бы не встречал раньше такого:

МР>
МР>const double &r = 0.1;
МР>

МР>Скажите, пожалуйста, стандартом разрешается создавать ссылку на константу?

испокон веков, причем время жизни временного объекта продлевается до конца жизни ссылки:
struct foo {};
foo boo() {return foo();}
...
{
  foo const& r = boo(); // временный объект будет жить до конца обрамляющего скопа
  ...
}
Re: Вопрос про const reference
От: Constructor  
Дата: 12.03.18 17:19
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Никогда вроде бы не встречал раньше такого:

МР>
МР>const double &r = 0.1;
МР>

МР>Скажите, пожалуйста, стандартом разрешается создавать ссылку на константу?

0.1 — это не константа, а литерал типа double.

Встречали ли Вы раньше следующую конструкцию?

const std::string& s = "Hello!";


Или такую?

void foo(const std::string& arg);

// ...

foo("World!");
Re[2]: Вопрос про const reference
От: Максим Рогожин Россия  
Дата: 12.03.18 17:25
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>испокон веков, причем время жизни временного объекта продлевается до конца жизни ссылки:


Да, но это для локальных ссылок. А если так:
const double &r = 0.1; // глобальная ссылка
int main() {
   return 0;
}
Re[2]: Вопрос про const reference
От: Максим Рогожин Россия  
Дата: 12.03.18 17:29
Оценка:
Здравствуйте, Constructor, Вы писали:

C>
C>const std::string& s = "Hello!";
C>


Это локальная ссылка? Или в глобальной области видимости? А в чем выгода такой конструкции по сравнению с
const std::string s("Hello!");
Re[3]: Вопрос про const reference
От: Constructor  
Дата: 12.03.18 17:49
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

C>>
C>>const std::string& s = "Hello!";
C>>


МР>Это локальная ссылка? Или в глобальной области видимости?


Может быть и локальной, и глобальной.

МР>А в чем выгода такой конструкции по сравнению с

МР>
МР>const std::string s("Hello!");
МР>


Выгоды нет, но ее никто и не обещал.
Re[4]: Вопрос про const reference
От: Максим Рогожин Россия  
Дата: 12.03.18 18:05
Оценка:
Здравствуйте, Constructor, Вы писали:

C>Может быть и локальной, и глобальной.

C>Выгоды нет, но ее никто и не обещал.

В вашем примере происходит преобразование типов из const char* в std::string. А в этом примере
const double &r = 0.1;

создается временная переменная double потому что ссылку можно инициализировать только переменной, так?
Re[5]: Вопрос про const reference
От: Constructor  
Дата: 12.03.18 18:20
Оценка: +1
Здравствуйте, Максим Рогожин, Вы писали:

МР>В вашем примере происходит преобразование типов из const char* в std::string.


Однако. Вот еще один пример:
const double &r = 0;


МР>А в этом примере

МР>
МР>const double &r = 0.1;
МР>

МР>создается временная переменная double потому что ссылку можно инициализировать только переменной, так?

Константная ссылка может быть привязана ко временному объекту.
Re[3]: Вопрос про const reference
От: Анатолий Широков СССР  
Дата: 12.03.18 19:28
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Здравствуйте, Анатолий Широков, Вы писали:


АШ>>испокон веков, причем время жизни временного объекта продлевается до конца жизни ссылки:


МР>Да, но это для локальных ссылок. А если так:

МР>
МР>const double &r = 0.1; // глобальная ссылка
МР>int main() {
МР>   return 0;
МР>}
МР>


Глобальная ссылка продлит время жизни временного объекта на время выполнения программы.
Re[5]: Вопрос про const reference
От: Meyers  
Дата: 20.03.18 17:25
Оценка:
МР>А в этом примере
МР>
МР>const double &r = 0.1;
МР>

МР>создается временная переменная double потому что ссылку можно инициализировать только переменной, так?

Создаётся временный объект типа const double.
Отредактировано 20.03.2018 17:25 Meyers . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.