Я наблюдал CppCon «Запись Хорошо C++ 14 ... По умолчанию» Херб Саттер и на одном из слайдов был следующий фрагмент кода:Когда цикл «для каждого» возвращает nullptr для элемента?
auto p = make_shared<circle>(42);
auto v = load_shapes();
for(auto& s: v) {
if(s && *s == *p) {
cout << *s << "is a match\n";
}
}
Мой вопрос: почему существует
если (s & & * s == * р)
чек?
Как можно ссылаться на переменную, инициализированную для каждого loop be nullptr? Loop выполняет итерацию по элементам, поэтому в этом случае может быть назначено значение nullptr?
EDIT: Моя точка интереса, что эта проверка:
if(s)
Когда s получается «для каждого», как это может быть пустым?
Рассмотрите тип 'v' может быть' std :: vector '. –
GManNickG
Это не имеет никакого отношения к ссылкам. Когда вы используете ссылку, вы просто используете переменную, к которой она привязана, вы не используете «ссылочную переменную». Таким образом, в этом коде объекты в 'v' могут быть преобразованы в bool. Тот факт, что код использует ссылку, не имеет значения. –
'using namespace std;' не хороший код - это подразумевается в этом примере –