Я прочитал статью о выводе типа auto
с помощью decltype
, и мне интересно, верна ли моя логика в отношении того, как тип выводится в приведенном ниже примере (так что, если я ошибаюсь, поправьте меня :)
#include <iostream>
using namespace std;
class Widget
{
public:
Widget() = default;
};
int main()
{
Widget w;
const Widget& cw = w; // cw is const Widget&
auto myWidget1 = cw; // (1) myWidget1 is Widget
decltype(auto) myWidget2 = cw; // (2) myWidget2 is const Widget&
}
Пока что я понял, что:
для 1 : используется автоматический вывод типа, и в этом случае он похож на вывод шаблонного типа для параметров, передаваемых по значению. Это означает, что cv-qualifiers и refs игнорируются, что приводит к Widget
как тип в конце.
для 2: используется decltype, а затем передается в auto, что на самом деле является cw
const Widget&, а затем все устанавливается, и тип является const Widget&.
Так я правильно написал/понял?
Спасибо
const auto& myWidget2 = cw;
также даст вамconst Widget&
. Часто точный тип не имеет значения, но константность и то, является ли это ссылкой или значением, почти всегда имеют значение;) - person 463035818_is_not_a_number   schedule 01.12.2018