Информация об изменениях

Сообщение Re: const& от 10.10.2025 11:17

Изменено 10.10.2025 11:23 rg45

Re: const&
Здравствуйте, Videoman, Вы писали:

V>Опять что-то перемудрили в стандарте или я неправильно понимаю ссылочные квалификаторы у методов класса?


V>В оправдании себя: думал что 'const&' квалификатор метода класса убережет меня от вызова метода у временного объекта. Но не уберегло, не фортануло. Стандарт позволяет вызвать метод у временного константного объекта. Дальше масса объяснений зачем это, что ссылка константная и она продлевается и это безопасно и бла-бла-бла. Во у меня рабочий пример и таки приведение оказалось не безопасным.


V>Но почему такое поведение по умолчанию, где я ошибся в своей логике-реализации ?


Разницу в поведении 'const' и 'const&' ты можешь обнаружить только при наличии в классе других перегрузок. Например, перегрузка по 'const' приводит к коллизии с перегрузкой по '&&', а перегрузка по 'const&' не приводит. В остальном же 'const' и 'const&' ведут себя одинаково. Т.е. обе эти перегрузки могут работать для rvalue-выражений. Т.е. правила в принципе те же самые, что и с явными параметрами обычных функций.
Re: const&
Здравствуйте, Videoman, Вы писали:

V>Опять что-то перемудрили в стандарте или я неправильно понимаю ссылочные квалификаторы у методов класса?


V>В оправдании себя: думал что 'const&' квалификатор метода класса убережет меня от вызова метода у временного объекта. Но не уберегло, не фортануло. Стандарт позволяет вызвать метод у временного константного объекта. Дальше масса объяснений зачем это, что ссылка константная и она продлевается и это безопасно и бла-бла-бла. Во у меня рабочий пример и таки приведение оказалось не безопасным.


V>Но почему такое поведение по умолчанию, где я ошибся в своей логике-реализации ?


Разницу между 'const' и 'const&' ты можешь обнаружить только при наличии в классе других перегрузок. Например, перегрузка по 'const' приводит к коллизии с перегрузкой по '&&', а перегрузка по 'const&' не приводит. В остальном же 'const' и 'const&' ведут себя одинаково. Т.е. обе эти перегрузки могут работать для rvalue-выражений. Т.е. правила в принципе те же самые, что и с явными параметрами обычных функций.