Нет такой вещи, как «адресные ссылки». Есть «ссылки», и они отличаются от указателей. Ссылки на C++ - очень мощная языковая функция, отсутствующая на многих других языках (например, C или Java).
Ссылка лучше всего изображается как другое имя для существующего объекта. Или еще лучше, как сам объект. Ссылка на объект.
Это совсем не похоже на указатель. Указатель сам по себе является объектом, который, как оказалось, указывает на что-то другое (или на ничего).
Они делают это по соображениям безопасности.
Нет, они этого не делают. Если бы они сказали это, тогда это не имеет смысла. Вы не используете ссылки для производительности (по крайней мере, не для неконстантных ссылок), вы используете их для правильности.
int& foo(int &i)
{
if (i > 10)
{
// or return nullptr;
return NULL;
}
return i;
}
Там нет такого понятия, как "нулевой ссылки". Помните, что ссылка является объектом. Итак, что ваша функция foo
здесь возвращает, фактически является самим объектом. Не указатель на него, не его адрес, а сам объект.
А какой объект NULL
или nullptr
be? Это не имеет смысла. Не может быть объекта, который ничего.
Если вам нужно иметь специальное «ничего» в вашей бизнес-логике, вы можете использовать что-то вроде boost::optional
. Или, может быть, вам действительно нужен указатель. Это зависит.
, а не ссылки на указатели.
Ссылки указателя существуют, но они не связаны с вашим примером.
Вот ссылка на указатель:
int main()
{
int x = 0;
int* ptr = &x;
int*& y = ptr; // "y" is now a different name for "ptr"
}
Вы нарушаете правило, что ссылки не могут быть NULL. –
Вы не можете вернуть 'nullptr', потому что он имеет тип указателя, но' int & 'объявляет тип возвращаемого типа ссылочным. – emlai
C++ не имеет понятия «адрес». «Ссылки на указатели», по крайней мере, так, как вы это понимаете. Я предлагаю вам прочитать разницу между указателями и ссылками. – Sneftel