【问题标题】:What will return if no map element found?如果没有找到地图元素会返回什么?
【发布时间】:2011-11-21 06:35:33
【问题描述】:

我的 C++ 标头有一些代码 sn-ps,如下所示:

private:
    std::map<std::string, std::vector<std::vector<unsigned short> > > m_usIRDataPool;

public:
    std::vector<std::vector<unsigned short> >& IRChannelData(std::string sChannelName);

在其实现文件(.cpp)中,IRChannelData() 有如下定义:

std::vector<std::vector<unsigned short> >& MyClass::IRChannelData(std::string sChannelName)
{   
    std::map<std::string, std::vector<std::vector<unsigned short> > >::iterator it = m_usIRDataPool.find( sChannelName );

    if ( it != m_usIRDataPool.end() )
    {  
       return it->second;
    }

  //  return ????; // How can I return?
}

那么,如果在m_usIRDataPool map 容器中没有找到条目(向量的向量)来摆脱,会返回什么

warning C4715: 'MyClass::IRChannelData' : not all control paths return a value.

【问题讨论】:

  • 您是在问您应该返回什么?或者您是在问如果您不返回任何东西会返回什么?
  • @Ben:最后一句好像是前者。
  • 如果该条目不存在,程序的其余部分应该做什么?它总是应该退出吗?或者如果它不存在,你应该创造一些东西吗?您返回的内容取决于您期望函数的调用者如何反应(它可能不会返回任何适当的异常)。

标签: c++ stl map vector


【解决方案1】:
  • 返回指示成功/失败的bool,并通过“out”语义参数返回结果向量的地址,或者
  • 如果在地图中找不到元素,则抛出异常

【讨论】:

  • 谢谢你,好主意。我会在以后的节目中记住您的建议。
【解决方案2】:

返回一个指针并返回0,以防你找不到你要找的东西。

【讨论】:

  • @GoldenLee:你不应该用给出的答案来编辑你的问题,否则所有的答案都将变得毫无意义。我回滚了你的编辑。
【解决方案3】:

当您返回对某事物的引用时,您不能在函数上声明一个空映射然后返回它。您可以做的是在 MyClass MyClass::emptyReturnMap 中声明一个与您要返回 std::vector&lt;std::vector&lt;unsigned short&gt; &gt; 相同类型的变量,然后返回它。但是如果你正在编辑它的内容(因为返回不是 const),你必须在每次调用时清除它。

【讨论】:

  • 谢谢!除了声明像 std::vector<:vector short> > m_v2DEmpty; 这样的空向量之外,我无能为力吗?如果是这种情况,我宁愿返回一个指针。
  • 不行,因为引用是经过的,必须在函数结束后才可用,如果你在函数内部声明,一旦函数超出范围,变量就会丢失,你'会得到一个内存访问错误。该变量可能是静态的。
猜你喜欢
  • 2016-07-24
  • 2011-02-04
  • 2011-10-17
  • 2010-12-15
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多