要引用的默认值 c++
Default values to reference, c++
所以我做了一个链表,其中包含我创建的类对象的引用。
我想做一种方法,在链表中搜索并返回对对象的 const 引用(如果存在),否则,如果对象不存在,则返回 SOME VALUE。
它应该是哪个值? 如果是 int,我会返回 0,如果它是指针,我会返回 NULL....
const Node& NodeList::NodeNumSearch(int num) const
{
Member *TempHead=MemberHead;
while(TempHead!=NULL)
{
if(TempHead->GetNode().getNum() == num)
return TempHead->GetNode();
TempHead=TempHead->GetNext();
}
return ???;
}
附言成员对象是链表的成员,节点对象是链表的成员对象中的值。
在这种情况下throw
异常,或者将函数更改为通过指针返回。这里没有一种理智的方法可以返回"空"引用。
或者采用标准库方法并按值返回类似交互器的代理,然后您可以检查它是否end
。
您可以将自己的 NullNode 定义为静态成员 var 并返回它。
// header
class NodeList
{
.....
static Node k_NullNode;
};
// cpp
/* static */ Node NodeList::k_NullNode; // you might need to pass a special argument to make it different from normal nodes.
const Node& NodeList::NodeNumSearch(int num) const
{
....
return k_NullNode;
}
// test
void test()
{
const Node& ret = NodeNumSearch(0);
if( ret == NodeList::k_NullNode ) // you might need to override == operator.
{
// failed to search..
}
else
{
// succeeded..
}
}
我认为
在 C/C++ 中,通常您传递一个指针来保存结果,并根据函数是否有效实际上返回一个值。或者,如果它不起作用,您应该抛出异常,而不是传回默认对象。仅当您希望其他代码使用该默认值时,才将默认值传回 - 用于似乎不太可能的搜索。
// Inject Node pointer to hold the reference
// Returns 1 if it worked, 0 otherwise
const int NodeList::NodeNumSearch(int num, Node* node) const
{
//your code here
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- Switch 语句(字符串)一直选择默认值,除非其为零
- 如何使用默认值将枚举声明为 extern
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 如何使用默认值为构造函数中的枚举赋值?
- 变量始终在函数中重置为默认值
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 函数不返回默认值
- 具有公共范围与专用范围的默认值的C++的不同行为
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 实例化时结构字段中的默认值