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