Size: a a a

cxx.Дискуссионная

2020 April 19

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Потому что разницы нет
источник

RM

Roy Mustang in cxx.Дискуссионная
Если у нас T изначельно &&, а то что мы муваем так же &&, то разве не T&& && ?
источник

RM

Roy Mustang in cxx.Дискуссионная
Ты имеешь в виду что после сжатия ссылок мы получим T&& ?
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Roy Mustang
Если у нас T изначельно &&, а то что мы муваем так же &&, то разве не T&& && ?
Нет, T здесь ссылкой не будет
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Roy Mustang
Ты имеешь в виду что после сжатия ссылок мы получим T&& ?
В примере 3 нет сжатия ссылок
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Сжатие ссылок происходит, когда T ссылка. Но в примере 3 оно выводится как нессылочный тип изначально
источник

RM

Roy Mustang in cxx.Дискуссионная
аа
источник

RM

Roy Mustang in cxx.Дискуссионная
то есть, если мы пытаемся переместить объект, который является ссылкой на наш объект основной
источник

RM

Roy Mustang in cxx.Дискуссионная
то только тогда эта ссылка участвует в типе?
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Если аргумент выражение, имеющее тип лвалуев ссылки, или имя переменной (то есть лвалуев), то T будет лвалуев ссылкой
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Как рвалуев ссылка T не выводится никогда
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Если аргумент выражение, имеющее тип лвалуев ссылки, или имя переменной (то есть лвалуев), то T будет лвалуев ссылкой
Вот к примеру
int a = 5;
int& b = a;
foo(b)
Получается, что здесь foo принимающий T&& станет для данного случаея T&& &, и за счет сжатия ссылок получится T& (так как мы передаем не a, а ссылку b)
А если мы сделаем так
int a = 5;
foo(a);
То получается что T изначально станет T& потому что лвалуе
источник

RM

Roy Mustang in cxx.Дискуссионная
Верно?
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Эти случаи ничем не отличаются. В обоих T выводится как int&, соответственно T&& тоже int& за счет сжатия ссылок
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Ты не спеши везде видеть сжатие ссылок, оно происходит при конкретных обстоятельствах
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Эти случаи ничем не отличаются. В обоих T выводится как int&, соответственно T&& тоже int& за счет сжатия ссылок
И в обоих T ссылка потому, что аргумент - имя переменной
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
И в обоих T ссылка потому, что аргумент - имя переменной
Так, мне нужно поэкспериментировать с is_same_v чтоб точно убедиться что там происходит, чтоб тебя не мучать
источник

RM

Roy Mustang in cxx.Дискуссионная
Как правильно проверить сам T и то что туда передается?
источник

RM

Roy Mustang in cxx.Дискуссионная
Через std::is_same_v
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Все, что я сейчас рассказываю, объясняет Мейерс за полчаса
источник