Почему в perfect forwarding на 1:50:00 указан исходник std::forward(::type& t), когда передается rvalue? У std::forward же два определения: для type& и type&&. По коду вроде дергается Foo&& std::forward(std::remove_reference::type&&)
У std::forward только одно определение, оно есть 1:43:30. Это определение по-разному раскрывается для случая lvalue и rvalue. В этом определении std::forward *всегда* принимает значение по обычной ссылке, т.е. аргумент функции std::forward в обоих случаях один и тот же, отличается тело функции и тип возвращаемого значения.
Люди добрые, пожалуйста, дайте ссылку на видео где этот докладчик рассказывает про упомянутый здесь (1:11:30) доступ к временному объекту через константную ссылку в старом стандарте.
Так и не понял, почему в функции void foo(int a), decltype(a) == int& ? Проверил на такой функции: void foo(int a){ decltype(a) b = a; b = 2; std::cout
+Владимир Лалаян всё верно, я забыл дополнительные скобки - нужно было написать decltype((a)). Это просто две формы decltype: если вызвать её от имени переменной, то получим тип с которым она была определена, а если с выражением - то тип соответствующего выражения. В данном случае нам нужен именно тип a как выражения, т.к. по этому типу будут выводиться параметры при вызове шаблонной функции.
"Фичи", "баги", "бэк-компэтибилити", "гайд-лайны"... Русских слов автору почему-то не хватает. Фраза о том, что "C++ отстал от Java" звучит довольно невежественно.
Почему в perfect forwarding на 1:50:00 указан исходник std::forward(::type& t), когда передается rvalue?
У std::forward же два определения: для type& и type&&.
По коду вроде дергается Foo&& std::forward(std::remove_reference::type&&)
У std::forward только одно определение, оно есть 1:43:30. Это определение по-разному раскрывается для случая lvalue и rvalue. В этом определении std::forward *всегда* принимает значение по обычной ссылке, т.е. аргумент функции std::forward в обоих случаях один и тот же, отличается тело функции и тип возвращаемого значения.
Люди добрые, пожалуйста, дайте ссылку на видео где этот докладчик рассказывает про упомянутый здесь (1:11:30) доступ к временному объекту через константную ссылку в старом стандарте.
Так и не понял, почему в функции void foo(int a), decltype(a) == int& ?
Проверил на такой функции:
void foo(int a){
decltype(a) b = a;
b = 2;
std::cout
+Владимир Лалаян всё верно, я забыл дополнительные скобки - нужно было написать decltype((a)). Это просто две формы decltype: если вызвать её от имени переменной, то получим тип с которым она была определена, а если с выражением - то тип соответствующего выражения. В данном случае нам нужен именно тип a как выражения, т.к. по этому типу будут выводиться параметры при вызове шаблонной функции.
Alexander Smal А, ну тогда ясно. Спасибо. И за качественную лекцию тоже :)
На экране куча-мала и сиди догадывайся про какую именно строку кода говорит в данный момент докладчик.
"Фичи", "баги", "бэк-компэтибилити", "гайд-лайны"... Русских слов автору почему-то не хватает. Фраза о том, что "C++ отстал от Java" звучит довольно невежественно.