如何在c++中返回函数类型以外的数据类型?

How can I return a data type other than function type in C++?

本文关键字:数据类型 类型 函数 c++ 返回      更新时间:2023-10-16

我试图建立一个树练习搜索算法,我需要访问一个空指针,以确保一个特定的节点是空的创建时…然而,我不知道如何得到一个空指针从一个T&函数类型。现在我把nullptr定义为标准的

int * key = 0;

需要访问并返回nullptr的函数是

T& getData() { ... }

我研究了隐式转换,但我不确定这是否是正确的方法,甚至不确定如何去做。此外,知道我必须在单个头文件中构建所有内容并且不能更改主文件可能会很有用。提前感谢任何见解,可以帮助我了解如何处理这一点!

返回T&的函数必须返回对T的引用,并且引用不能为NULL。因此,您不能返回NULL -您将有效地使用return *NULL;,这显然是无效的。

你有几个选择:

  1. T&转换为T*。然后可以返回NULLnullptr。我建议避免0作为NULL的符号,因为它可能会令人困惑。抛出异常。如果getData() 假定返回对数据的引用,那么可以公平地假设获取不存在的数据(为其提供引用)是未定义的行为/错误,可以这样处理。
  2. 根据T实际上是什么(这真的是一个模板,还是T只是速记?),您可以为该类型创建一个"NullType"。例如,Data可能是DataInterface, NullData可能是DataInterface
  3. 在一些非常罕见的情况下,返回对某种"死"数据的引用(例如/dev/null)是一种选择。我怀疑在这种情况下,因为你可能想要知道返回的值是无效的;然而,在数据绝对必须返回且您没有数据的情况下,创建静态对象以在这些情况下返回可能是与错误报告配对的技巧。

我想说,你唯一特别好的选择是你已经排除的那个,#1。

然而,我不知道如何获得一个空指针从T&函数类型。

你不能。如果函数声明返回对T的引用,它必须返回对T的引用,而不是指针。

(…除非T是指针类型,例如int*,但你仍然必须返回对int*的引用。

如果你想选择从函数返回"nothing",那么让它返回一个指针,因为引用(与指针相反)总是引用一些东西。

PS:我希望你没有做类似的事情:

T& getData() {
    T data = T(....);
    return data;   // BOOM // dont do this
}