C++函数能否省略显式类型实例化,用空初始化列表返回?
能否用
return {}简化复杂返回类型的返回语句? 完全可以用return {}替代显式构造返回对象的写法,这在C++11及以后的标准中是合法且语义等价的。
具体到你的代码场景
在这个分支里:
if (type == DataType::Invalid) { return std::vector<std::map<int, std::string>>(); // 显式构造 return {}; // 完全可以这么写 }
return {}会让编译器根据函数的返回类型std::vector<std::map<int, std::string>>,自动调用该类型的默认构造函数,生成一个空对象返回,效果和显式构造完全一致。
原理说明
C++11引入的列表初始化规则中,当return语句后跟空初始化列表{}时,编译器会匹配返回类型的默认构造(只要该类型支持默认构造)。对于std::vector、std::map这类标准库容器来说,它们都提供了默认构造函数,所以这种写法完全安全。
对比其他写法
你提到的先定义返回对象再填充的写法:
std::vector<std::map<int, std::string>> ret; // 填充逻辑 return ret;
这种写法本身没有问题,但在需要返回空对象的分支里,return {}更简洁,避免重复书写冗长的嵌套类型名,可读性和维护性更好。
内容的提问来源于stack exchange,提问作者beng in
相关产品推荐
相关产品推荐

