Я только что испытал этот кусок кода.переменная, объявленная auto иногда по ссылке?
vector<bool> v(5, true);
if(v.back())cout<<"====="<<endl;
auto b1 = v.back();
b1 = false;
cout<<&b1<<endl;
if(v.back())cout<<"*********"<<endl;
Мои вопросы следующие:
- "*********" (без кавычек) не появляется на выходе, почему переменная объявленного
auto
меняется bool vectorv
? - Я понимаю, что
vector<bool>
не является стандартным контейнером STL, и обращаясь к элементу него&v[4]
не будет работать (так как вы не можете обратиться к адресу немного), еслиb1
объявлен ссылкой наv.back()
, почему Я могу обратиться кb1
по телефону&b1
? - В каких случаях
auto
имеет такое поведение? Делаетauto c1 = v.begin()
и позже делаетc1 = (++v.begin())
изменитv.begin()
?
Знайте, что 'vector' не является «вектором». –
Deduplicator
'back()' return reference, поэтому я думаю, что авто будет предпочитать объявлять его ссылкой. если вы хотите быть уверенным проверить его с классом и проверить, был ли вызван конструктор копирования. – SHR
@ ШХР: Э-э ... что? 'auto x = whatever;' всегда означает, что 'x' * не является * ссылкой. – Deduplicator