В этом цикле на основе диапазона для
for (auto c: s) {c='?'; cout << c << endl;}
существует три итерации, поскольку размер строки s
равен 3
.
В цикле назначенныйзначение объекта c
игнорируется, и объект переназначается символом '?'
.Таким образом, выводятся три символа '?'
.
Тип локальной переменной c равен char
, что является типом значения класса std::string
В этом цикле на основе диапазона for
for (auto& c : s) cout << (void*)&c << endl;
переменная c
имеет ссылочный тип, точнее тип char &
.Таким образом, в этом цикле выводятся адреса ссылочных объектов.То есть в этом цикле выводятся адреса элементов строки s
.
В этом основанном на диапазоне для цикла
for (auto c : s) cout << (void*)&c << endl;
выводится адрес той же локальной переменнойc
.