Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
98 / 71 / 13
Регистрация: 15.12.2013
Сообщений: 453
1

В каком случае используется вторая перегрузка std::forward?

10.12.2018, 16:26. Просмотров 336. Ответов 2
Метки нет (Все метки)

В каком случае используется втарая перегрузка std::forward?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//clang 3.8.0
 
#include <iostream>
#include <type_traits>
#include <utility>
 
template <class T>
constexpr T&& myForward( typename std::remove_reference<T>::type& t ) noexcept
{
    std::cout << "myForward lvalue\n";
    return static_cast<T&&>(t);
}
 
template <class T>
constexpr T&& myForward( typename std::remove_reference<T>::type&& t ) noexcept
{
    std::cout << "myForward rvalue\n";
    return static_cast<T&&>(t);
}
 
template <class T>
void test(T&& t)
{
    myForward<T>(t);
}
 
template <class... Args>
void testArgs(Args&&... args)
{
    const auto stub = [](auto... packet)
    {
        std::cout << "stub called with " << sizeof...(packet) << " arguments";
    };
    
    stub(myForward<Args>(args)...);
}
 
int main()
{
    int a = 0;
    const int c = 120;
    
    test(1);
    test(a);
    test(std::move(a));
    test(c);
    
    std::cout << std::endl;
    
    testArgs(1, a, std::move(a), c);
}
В данном примере везде используется та версия, что принимает lvalue, оно и понятно, потому что внутри шаблона мы передаем в функцию forward выражение t - которое всегда lvalue. Но когда будет вызван forward принимающий rvalue ссылку? Мы же как правило не пишем:

C++
1
std::forward<Type>(std::move(object));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2018, 16:26
Ответы с готовыми решениями:

В каком случае используется метод-выражение?
В каком случае используется метод-выражение c#?

Применение std::forward
Хочу сделать внутри метода большой обьект. Затем передать его через return. Для этого хочу...

C++11 - std::forward и static_assert
Привет. Эта тема создана в познавательных целях. А именно, мне не совсем понятна реализация...

В каком случае необходимо применять StringBuilder, а в каком String?
Знаю, что уже есть подобные темы, но ответа в них не нашел. Да, String используется чаще, поэтому...

2
864 / 324 / 74
Регистрация: 17.05.2015
Сообщений: 985
10.12.2018, 17:49 2
Цитата Сообщение от ASCII Посмотреть сообщение
когда будет вызван forward принимающий rvalue ссылку?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <type_traits>
#include <utility>
 
template <class T>
constexpr T&& myForward( typename std::remove_reference<T>::type& t ) noexcept
{
   std::cout << "myForward lvalue\n";
   return static_cast<T&&>(t);
}
 
template <class T>
constexpr T&& myForward( typename std::remove_reference<T>::type&& t ) noexcept
{
   std::cout << "myForward rvalue\n";
   return static_cast<T&&>(t);
}
 
template <class T>
void test(T&& t) { myForward<T>( std::move(t) ); }
 
int main()
{
   int a = 0;
   const int c = 120;
   
   test(1);
   test(a);
   test(std::move(a));
   test(c);
}
0
98 / 71 / 13
Регистрация: 15.12.2013
Сообщений: 453
10.12.2018, 18:42  [ТС] 3
Так я об этом написал, вот только такого кода никогда не видел)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2018, 18:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Зачем в определении std::forward () нужен объект remove_reference?
Зачем в определении std::forward() нужен объект remove_reference ? И почему не могут быть выведены...

В каком случае оформляются доокументы
В каком случае оформляются доокументы: Платежное поручение входящее и Платежное поручение исходящее?

На каком расстоянии от места взрыва упадет вторая часть снаряда?
Снаряд разрывается в верхней точки траектории на высоте 20 м на две одинаковые части. Через 1 с...

В каком случае Qt покупают. Или О лицензиях
Желаю не болеть короновирусом каждому читающему это! В каком случае требуется покупать Qt? На...

В каком случае нужно использовать OWIN?
В каком случае нужно (не нужно) использовать OWIN?

В каком случае нужен свой DNS?
Прошу прощения, не совсем чайник, но многое не понимаю. Планируется интернет магазин на VDS и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.