C++函数返回引用的问题

C++语言 码拜 9年前 (2015-10-08) 974次浏览

实现一个根据ID返回相关信息的函数,为了提高效率节约资源,返回值采用常引用形式,代码如下:

const MarketInfoMsg& CMarketMsgProcess::GetLastMarketByInstID(long& lInstID)
{
	if (m_mpMarketInfo.find(lInstID) != m_mpMarketInfo.end())
	{
		return m_mpMarketInfo.at(lInstID);
	}
	else
	{
		//该怎么返回呢?
	}
}

问题:如果没有该ID的信息记录,该怎么返回调用该函数的地方才知道是否有相关信息?
我能想到的只能退而求其次,实现如下

bool CMarketMsgProcess::GetLastMarketByInstID(long& lInstID, MarketInfoMsg& msgMarket)
{
	if (m_mpMarketInfo.find(lInstID) != m_mpMarketInfo.end())
	{
		msgMarket = m_mpMarketInfo.at(lInstID);
		return true;
	}
	return false;
}
方案推荐指数:10
定义一个默认值,没有的话返回一个默认值的引用

const MarketInfoMsg& CMarketMsgProcess::GetLastMarketByInstID(long& lInstID)
{
    if (m_mpMarketInfo.find(lInstID) != m_mpMarketInfo.end())
    {
        return m_mpMarketInfo.at(lInstID);
    }
    else
    {
        static MarketInfoMsg defaultMsg = { ... };
        return defaultMsg;
    }
}
方案推荐指数:10
C++返回引用,有这么几种情况
1)全局函数或者名空间的函数,静态函数,以及类的静态成员函数
   1.1 )返回引用参数,以及他的一部分(如果是结构对象或者类对象的话,他的成员变量)
   1.2) 数组参数,返回全部数组(数组引用参数),或者数组的一个元素。
   1.3) 返回一下对象,以及他的一部分(结构类型或者类类型的成员变量,数组的各个元素,等);
           返回全局对象(全局变量)
           文件静态对象(变量),
           函数内部(语句组中的)静态对象,
           类的静态成员变量
         
2)类的成员函数:
2.1)返回 *this; 
2.2) 返回 this-> member;
2.3)返回类的静态变量,以及他的一部分
2.4)参照全局函数

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++函数返回引用的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)