实现一个根据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)参照全局函数
1)全局函数或者名空间的函数,静态函数,以及类的静态成员函数
1.1 )返回引用参数,以及他的一部分(如果是结构对象或者类对象的话,他的成员变量)
1.2) 数组参数,返回全部数组(数组引用参数),或者数组的一个元素。
1.3) 返回一下对象,以及他的一部分(结构类型或者类类型的成员变量,数组的各个元素,等);
返回全局对象(全局变量)
文件静态对象(变量),
函数内部(语句组中的)静态对象,
类的静态成员变量
2)类的成员函数:
2.1)返回 *this;
2.2) 返回 this-> member;
2.3)返回类的静态变量,以及他的一部分
2.4)参照全局函数