Форум программистов, компьютерный форум CyberForum.ru

В чем разница двух перегрузок? - C++

Восстановить пароль Регистрация
 
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.01.2014, 03:18     В чем разница двух перегрузок? #1
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// move.h
template<typename _Tp>
    constexpr _Tp&&
    forward(typename std::remove_reference<_Tp>::type& __t) noexcept
    { return static_cast<_Tp&&>(__t); }
 
template<typename _Tp>
    constexpr _Tp&&
    forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
    {
      static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
            " substituting _Tp is an lvalue reference type");
      return static_cast<_Tp&&>(__t);
    }
И для чего 2-я падает, когда передаем LValue?
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 03:18     В чем разница двух перегрузок?
Посмотрите здесь:

C++ В чем разница.
В чем разница? C++
C++ в чем разница?
C++ В чем разница
В чем разница C++
C++ В чем разница?
C++ В чем разница между X x; и X x()?
C++ Оператор new. Динамическое выделение памяти - В чем разница двух определений массивов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
08.01.2014, 06:33     В чем разница двух перегрузок? #2
Перегрузка идет по типу ссылок - lvalue и rvalue.
В случае с rvalue, проверяем на стадии компиляции, не является ли тип _Tp ссылкой lvalue (Type&). Если все верно (является Type или Type&&), то реализуем(кастуем к) rvalue на основе нашего объекта. Таким образом, реализуем move-семантику.

Запрещено потому что
Type&& & в итоге даст Type&. Так работает свертка ссылочных типов
http://www.rsdn.ru/article/cpp/Cpp11NewStd.xml
Yandex
Объявления
08.01.2014, 06:33     В чем разница двух перегрузок?
Ответ Создать тему
Опции темы

Текущее время: 23:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru