考虑以下内容:
这种方法在生成子集、排列等问题上非常标准。然而,考虑到类型的内部数据结构相当复杂(
因此,在考虑性能(如果有必要的话)和
比如说这个:
typedef std::unordered_multiset<int> Set;
typedef std::set<Set> SetOfSets;
SetOfSets somethingRecursive(SomeType somethingToAnalyze) {
Set s;
// ...
// check base cases, reduce somethingToAnalyze, fill in s
// ...
SetOfSets ss = somethingRecursive(somethingToAnalyze);
ss.insert(s);
return ss;
}
这种方法在生成子集、排列等问题上非常标准。然而,考虑到类型的内部数据结构相当复杂(
std::unordered_multiset
是一个哈希表,std::set
通常是二叉搜索树),我尝试绘制了一个图表来解释返回值优化应该如何进行优化,但是,我只能希望编译器比我更聪明。因此,在考虑性能(如果有必要的话)和
C++14
的情况下,我可以在这里返回一个SetOfSets
吗?还是应该将其作为输出参数通过引用传递?
return ss;
,而且ss
是一个本地非静态类类型变量,所以我将在第一时间使用调用者提供的返回地址来代替我的堆栈空间中的ss
。” - ascheplerstd::atomic
),也可以在 C++17 中返回 prvalue。 - Daniel Langr