Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
12.08.2021, 22:37
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
Код: plaintext 1. 2.
Поясните пожалуйста зачем здесь std::remove_reference<T> Ведь даже если это убрать должен сработать Reference - collapsing Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 03:07
|
|||
---|---|---|---|
std::forward Тонкости |
|||
#18+
Нет. В данном случае, тип параметра t становится "чистым" без ссылок вообще. А reference collapsing это совершенно другой зверек. Если убрать remove_reference и у тебя в качестве T пойдет какой-нибудь A&, то тип параметра t останется T& - одинарная ссылка. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 11:18
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
White Owl Нет. В данном случае, тип параметра t становится "чистым" без ссылок вообще. А reference collapsing это совершенно другой зверек. Если убрать remove_reference и у тебя в качестве T пойдет какой-нибудь A&, то тип параметра t останется T& - одинарная ссылка. Ну вот представим себе что у нас есть некоторое l-value и мы на нем запускаем forward Что в таком Код: plaintext 1. 2.
что в таком Код: plaintext 1. 2.
будет вызван этот же самый forward ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 12:26
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
Второй случай не будет компилироваться довольно часто с ошибкой "недопустимый тип". Особенно если для него использовать decltype(auto). Для стандартных темплейтов это неприемлемо. Поэтому в STL вот такие костыли на каждом первом шагу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 12:33
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
Dimitry Sibiryakov Второй случай не будет компилироваться довольно часто с ошибкой "недопустимый тип". Особенно если для него использовать decltype(auto). Для стандартных темплейтов это неприемлемо. Поэтому в STL вот такие костыли на каждом первом шагу. А можно привести пример когда такой шаблон не скомпилируется ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 12:47
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
Как-то так: Код: sql 1. 2. 3. 4.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 20:44
|
|||
---|---|---|---|
std::forward Тонкости |
|||
#18+
Dimitry Sibiryakov, Вы же говорили, что программируете на "C with classes". Откуда у Вас такие познания? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.08.2021, 22:01
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
petravОткуда у Вас такие познания? "О, сколько нам открытий чудных" готовит граблями усеянное поле. Данный пример - из попытки использовать google protobuf. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.08.2021, 11:53
|
|||
---|---|---|---|
std::forward Тонкости |
|||
#18+
shellye, да какие тут тонкости?! std::forward() используется для проброса значения шаблонного параметра (prvalue) в виде right-reference (xvalue). Для всего остального используется std::move(). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.08.2021, 21:08
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
rdb_dev shellye, да какие тут тонкости?! std::forward() используется для проброса значения шаблонного параметра (prvalue) в виде right-reference (xvalue). Для всего остального используется std::move(). Зачем тут T&& forward( typename std::remove_reference<T>::type& t ) noexcept; нужен std::remove_reference<T> ? Ведь можно просто написать T&& forward( T& t ) noexcept; В чем разница ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.08.2021, 10:25
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
shellye, Скорее всего это сделано чтобы отключить вывод типов шаблона, чтобы не дать вызвать std::forward без инстанцирования (что привело бы к неверному и опасному результату - lvalue ссылки бы превращались в rvalue). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.08.2021, 15:23
|
|||
---|---|---|---|
std::forward Тонкости |
|||
#18+
shellye, не занимайся фигнёй! Лучше почитай, что такое "Perfect Forwarding" . ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.08.2021, 14:10
|
|||
---|---|---|---|
|
|||
std::forward Тонкости |
|||
#18+
rdb_dev shellye, не занимайся фигнёй! Лучше почитай, что такое "Perfect Forwarding" . Не поверишь именно этим и занимался А в чем ты видишь занятие фигней ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=57&mobile=1&tid=2017176]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 388ms |
0 / 0 |