C++ 通过引用返回空向量

C++ 通过引用返回空向量,c++,c++11,dictionary,vector,C++,C++11,Dictionary,Vector,我正在通过引用返回一个向量,如下所示,当我想返回一个空向量时,当地图中没有项目时,它变得有点难看。下面给出了警告(返回局部变量的地址),为了修复它,我有另一个私有成员变量vector empty,我可以返回它以避免出现这种情况 我想知道是否有优雅的方式来实现这一点 const std::vector<ClassA>& GeVector(const std::string& class_id) { auto iter = class_map_.find(class_id

我正在通过引用返回一个向量,如下所示,当我想返回一个空向量时,当地图中没有项目时,它变得有点难看。下面给出了警告(
返回局部变量的地址
),为了修复它,我有另一个私有成员变量
vector empty
,我可以返回它以避免出现这种情况

我想知道是否有优雅的方式来实现这一点

const std::vector<ClassA>& GeVector(const std::string& class_id) {
auto iter = class_map_.find(class_id);
if (iter != class_map_.end())
    return iter->second;
return {}; // return empty_;
}

private:
std::unordered_map<std::string, std::vector<ClassA>> class_map_;
vector<ClassA> empty_;
const std::vector和GeVector(const std::string和class_id){
自动iter=类映射查找(类id);
if(iter!=class\u map.end())
返回iter->second;
return{};//返回空值;
}
私人:
std::无序的映射类映射;
向量空函数;

您可以使用静态变量:

static const std::vector<ClassA> empty;
return empty;
static const std::vector empty;
返回空;

如果您的方法支持失败选项,您可以抛出异常而不是返回空向量

const std::vector<ClassA>& GeVector(const std::string& class_id) {
    auto iter = class_map_.find(class_id);
    if (iter != class_map_.end())
       return iter->second;

    throw std::exception("Element not found"); // or similar
}
const std::vector和GeVector(const std::string和class_id){
自动iter=类映射查找(类id);
if(iter!=class\u map.end())
返回iter->second;
抛出std::exception(“未找到元素”);//或类似命令
}

您的
清空
是一种优雅的方式。可以使其保持静态,以便更好地测量。返回一个指针,可能是
nullptr
@john nullptr不工作。编译失败。@RedFox请注意第一句话。警告是正确的-返回对局部变量tat的引用将在函数调用后不再存在。您的本地
empty\uu
是一个不错的解决方案。该函数还可以抛出异常或返回指针而不是引用(编译失败不是阻止因素),静态函数作用域变量承受(微小的)性能影响。类级static没有这个缺点。@SergeyA但是类级static遭受了静态初始化顺序的失败。在这种情况下不是这样。@SergeyA为什么不呢?好的,我应该重新表述它-不是用提供的代码。