Понимание вывода типа шаблона. Случай 1 в книге Скотта Мейера «Эффективный современный C++».C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Понимание вывода типа шаблона. Случай 1 в книге Скотта Мейера «Эффективный современный C++».

Сообщение Гость »


В своей книге Эффективный современный C++, раздел Пункт 1: Понимание вывода типов шаблонов, Скотт Мейерс сказал следующее, обсуждая Случай 1: ParamType — это Ссылка или указатель, но не универсальная ссылка

Во всех этих примерах показаны ссылочные параметры lvalue, но вычисление типа работает. точно так же для ссылочных параметров rvalue. Конечно, только rvalue аргументы могут передаваться ссылочным параметрам rvalue, но это ограничение не имеет ничего общего с выводом типов.

Примеры ссылок на lvalue, приведенные в разделе перед цитируемым абзацем, следующие.

Если это наш шаблон,

шаблон недействительный f (T& параметр); // параметр является ссылкой и у нас есть объявления переменных,

int x = 27; // x — целое число const int cx = х; // cx — константное целое число const int& rx = x; // rx — это ссылка на x как константное целое число выведенные типы для param и T в различных вызовах следующие:

f(x); // T — int, тип параметра — int& е (сх); // T — const int, тип параметра — const int& е (прием); // T — const int, тип параметра — const int& Вопрос: Для меня приведенный выше абзац немного сбивает с толку по следующей причине.

Если я попытаюсь тренировать себя, пример случая 1, который касается ссылок на rvalue, как он должен выглядеть? Может быть вот так?

шаблон недействительный f (T&& параметр); // параметр — это ссылка на rvalue Но разве этот случай не аналогичен случаю 2: ParamType является универсальной ссылкой?

Как можно отобразить ссылку rvalue в случае 1, чтобы она автоматически не стала ссылкой Universal/Forwarding, поскольку она находится в контексте, определяемом типом?

Один из способов понять это — сопоставить это со случаем 2, подслучаем 2, где инициализирующее выражение является значением r. В этом случае указано, что он будет работать так же, как Вариант 1. Так что, возможно, это обратный цикл от Варианта 2 к Варианту 1.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»