如何在c++中返回函数类型以外的数据类型?
How can I return a data type other than function type in C++?
我试图建立一个树练习搜索算法,我需要访问一个空指针,以确保一个特定的节点是空的创建时…然而,我不知道如何得到一个空指针从一个T&函数类型。现在我把nullptr定义为标准的
int * key = 0;
需要访问并返回nullptr的函数是
T& getData() { ... }
我研究了隐式转换,但我不确定这是否是正确的方法,甚至不确定如何去做。此外,知道我必须在单个头文件中构建所有内容并且不能更改主文件可能会很有用。提前感谢任何见解,可以帮助我了解如何处理这一点!
返回T&
的函数必须返回对T
的引用,并且引用不能为NULL。因此,您不能返回NULL -您将有效地使用return *NULL;
,这显然是无效的。
你有几个选择:
- 将
T&
转换为T*
。然后可以返回NULL
或nullptr
。我建议避免0作为NULL的符号,因为它可能会令人困惑。抛出异常。如果getData()
假定返回对数据的引用,那么可以公平地假设获取不存在的数据(为其提供引用)是未定义的行为/错误,可以这样处理。 - 根据
T
实际上是什么(这真的是一个模板,还是T
只是速记?),您可以为该类型创建一个"NullType"。例如,Data
可能是DataInterface
,NullData
可能是DataInterface
。 - 在一些非常罕见的情况下,返回对某种"死"数据的引用(例如
/dev/null
)是一种选择。我怀疑在这种情况下,因为你可能想要知道返回的值是无效的;然而,在数据绝对必须返回且您没有数据的情况下,创建静态对象以在这些情况下返回可能是与错误报告配对的技巧。
我想说,你唯一特别好的选择是你已经排除的那个,#1。
然而,我不知道如何获得一个空指针从T&函数类型。
你不能。如果函数声明返回对T
的引用,它必须返回对T
的引用,而不是指针。
(…除非T
是指针类型,例如int*
,但你仍然必须返回对int*
的引用。
如果你想选择从函数返回"nothing",那么让它返回一个指针,因为引用(与指针相反)总是引用一些东西。
PS:我希望你没有做类似的事情:
T& getData() {
T data = T(....);
return data; // BOOM // dont do this
}
相关文章:
- 如何检测类型类型别名?
- 基类数据成员类型取决于派生类
- 根据数据包类型更改行为,避免开关语句
- 在模板中使用类型类型的类型类型使用模板类别IT自我
- 具有枚举类型类型的C 方法
- 如何有效地从文件一行又一行地读取数据(相同类型)到多个向量(vectros的向量)
- qmetatype ::类型从模板类型类型
- C 线程错误:无类型类型
- C++ 类型(类型名称)上的问题
- 如何识别从iBrokers API接收的历史数据的类型(whatToShow)
- 确定类型类型
- 函数指针类型(F)(类型)和类型(类型)(类型)(类型)之间的差异
- 数据管理员类型的const校正性 - 更好的解决方案
- 是否可以从C#调用具有数据集类型参数的C++函数
- GDB:显示某些数据的类型信息
- 数据包:有效地表示不同的数据包类型
- 如何使用typeid来确定指针中数据的类型
- 获取和设置内部数据:返回类型,错误情况下的行为
- 如何:公开c++数据结构/类型(结构体,枚举)供c#使用
- 基于另一个数据成员的类数据成员类型