Ссылка на стиль Java возвращается в C ++

0

Рассмотрим этот фрагмент кода Java:

Vertex a = graph.addVertex(null);
Vertex b = graph.addVertex(null);

Можно ли сделать то же самое в C++? AFAIK только в C++ будет:

Vertex& a = graph.addVertex(NULL);

Или, может быть, это:

typedef Vertex& Vertexref;
Vertexref a = graph.addVertex(NULL);

Конечно, возможно возвращение копии объекта.

Но синтаксис Java кажется мне более понятным. Было бы возможно иметь его в C++?

  • 1
    Вы можете изменить класс Vertex для хранения общих указателей на его данные, если вы действительно не заботитесь о производительности.
  • 1
    Не вводите ссылку, иначе люди, которые должны поддерживать ваш код, будут охотиться за вами.
Показать ещё 2 комментария
Теги:
reference

2 ответа

5
Лучший ответ

Вы можете подумать, что синтаксис Java более прост, но попробовали ли вы вернуть копию объекта на Java? Это гораздо менее прямолинейно. C++ позволяет вам ссылаться на ссылки, тогда как Java заставляет вас отказаться от ссылок. Качели и карусели.

Вы уже показали нам два способа написать это в C++, и они оба очень просты.

  • 2
    Но скрывать ссылку за typedef мне кажется неправильным.
  • 0
    Это также кажется мне неправильным. Иногда я удивляюсь, почему C ++ не предоставляет механизм для возврата ссылок без необходимости вызывающей стороны явно создавать ссылку.
Показать ещё 3 комментария
5

Объекты Java ссылаются указателями, даже если они не видны в синтаксисе так же, как в C++. Ваша функция Java действительно не возвращает ссылку (в смысле C++, а не только синоним для указателя), но возвращает указатель, и этот указатель возвращается значением. Таким образом, эквивалент C++ будет примерно таким:

Vertex* a = graph.addVertex(null);
Vertex* b = graph.addVertex(null);

Ошибочно думать о "ссылках" на Java как о том, что "ссылки" в C++. Java-ссылки являются указателями. C++ "ссылки" - это псевдонимы для переменных, что не то же самое, что и указатель, хотя они обычно (но не всегда) реализованы "под капотом" с помощью указателей.

Чтобы уточнить: это не просто терминология. Ваша программа C++ не будет вести себя так же, как ваша Java-программа, если вы просто переводите ссылки на Java на ссылки C++. Чтобы сделать эквивалентную C++ программу, вам нужно использовать указатели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню