【发布时间】:2019-06-11 00:56:00
【问题描述】:
我通过引用返回一个向量,如下所示,当我想在地图中没有项目时返回一个空向量时,它变得有点难看。下面给出警告 (returning address of local variable) 并修复它,我有另一个私有成员变量 vector<ClassA> 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_;
【问题讨论】:
-
您的
empty_是一种优雅的方式。可以使其静态化。 -
返回一个指针,可以是
nullptr。 -
@john nullptr 不起作用。编译失败。
-
@RedFox 注意第一句话。
-
警告是正确的 - 您返回对局部变量的引用 tat 在函数调用后将不复存在。您当地的
empty_是一个不错的解决方案。该函数还可以抛出异常或返回指针而不是引用(编译失败不是阻塞器)
标签: c++ c++11 dictionary vector