Java 样式引用以C++返回

Java style reference returns in C++

本文关键字:C++ 返回 引用 样式 Java      更新时间:2023-10-16

考虑这个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++吗?

您可能认为 Java 语法更简单,但您是否尝试过在 Java 中返回对象的副本?这远没有那么简单。C++让你选择加入引用,而Java让你选择加入引用。秋千和环形交叉路口。

您已经向我们展示了用C++编写此内容的两种方法,它们都非常简单。

Java 对象由指针引用,即使它在语法中不可见,与在C++中相同。您的 Java 函数实际上并不返回引用(在C++意义上,不仅仅是指针的同义词),但它返回一个指针,并且该指针按值返回。所以等效C++是这样的:

Vertex* a = graph.addVertex(null);
Vertex* b = graph.addVertex(null);
将Java中的"引用"

与C++中的"引用"视为一回事是错误的。Java的"引用"是指针。C++"引用"是变量的别名,这与指针不同,即使它们通常(但并非总是)使用指针"在引擎盖下"实现。

澄清一下:这不仅仅是术语吹毛求疵。如果只是将 Java 引用转换为C++引用,则C++程序的行为将与 Java 程序不同。要制作等效的C++程序,您需要使用指针。