170 похожих чатов

*Beg это значение элемента, на который указывает итератор, верно? Но

все же Decltype(*beg) почему-то возвращает ссылку

21 ответов

22 просмотра

Потому что оператор разименования возвращает ссылку, если тебе нужно значение используй std::remove_reference, возможно, даже std::remove_cv_ref

Ilya- Автор вопроса
disba1ancer
Потому что оператор разименования возвращает ссылк...

Во! этот вопрос как раз. Почему он на значение возвращает ссылку?

Ilya
Во! этот вопрос как раз. Почему он на значение воз...

Потому что так в итераторе объявлено, нет?

Ilya- Автор вопроса
disba1ancer
Потому что так в итераторе объявлено, нет?

тогда что он вернет если написать decltype(beg)?

Ilya
Во! этот вопрос как раз. Почему он на значение воз...

Ещё как вариант можешь убрать тип возврата и оставить только auto, возможно, даст нужный эффект, но это не точно

Ilya- Автор вопроса
disba1ancer
Ещё как вариант можешь убрать тип возврата и остав...

в книжке какая-то странная конструкция была, что-то типа ??? вместо auto, я прифигел

Ilya
тогда что он вернет если написать decltype(beg)?

Вернёт сам итератор, он же по значению принимается

Ilya- Автор вопроса
disba1ancer
Вернёт сам итератор, он же по значению принимается

то есть decltype(*beg) вернет ссылку, а decltype(beg) вернет итератор?

Ilya- Автор вопроса
disba1ancer
Да

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

Ilya
то есть decltype(*beg) вернет ссылку, а decltype(b...

Дело в том что конструкция *beg возвращает не значение, а ссылку на значение, это посволяет меньше копировать, да и от контейнеров часто ожидается, что модификация объекта полученного через итератор, модифицирует объект внутри контейнера

Ilya- Автор вопроса
disba1ancer
Дело в том что конструкция *beg возвращает не знач...

то есть rvalue reference? Если она возвращает ссылку на значение, то после завершения работы ф-ии, ссылка сотрется и результат непредсказуем, разве нет?

Ilya
а это разве в данном контексте не одно и то же? Ес...

Это немного разные сущности с разным поведением, хоть и могут быть похожи на низком уровне

Ilya- Автор вопроса
disba1ancer
Это немного разные сущности с разным поведением, х...

имеется ввиду если ф-я возвращает указатель или ссылку, какая разница то?

Ilya
то есть rvalue reference? Если она возвращает ссыл...

Итераторы возвращают lvalue reference, я же говорил, что объект полученный через итератор должен быть объектом из контейнера, а не его копией

Ilya- Автор вопроса
Ilya
имеется ввиду если ф-я возвращает указатель или сс...

Указатели надо ещё разыменовать, они могут быть нулевыми, и может ещё чего есть...

Ilya- Автор вопроса
disba1ancer
Указатели надо ещё разыменовать, они могут быть ну...

но при этом ты ведь не присвоишь результат работы функции, которая возвращает ссылку НЕ указателю

Ilya
но при этом ты ведь не присвоишь результат работы ...

Результат работы функции которая возвращает ссылку, можно использовать там где допустимо использовать сам объект

Ilya
но при этом ты ведь не присвоишь результат работы ...

Посмотри iterator_traits. Это то что тебе нужно

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта