设置 returns 对 std:vector 的引用但有时默认为空的函数的最有效(或最佳实践)方法是什么?

What is the most efficient (or just best practice) way to set up a function that returns a reference to an std:vector but sometimes a default empty?

采用以下函数(显然不能编译)。

const std::vector<int>& getMyVector()
{
    if (something)
        return std::vector<int>();

    if (somethingElse)
        return m_myVector;

    return std::vector<int>();
}

假设 m_myVector 很大,或者不适合通过副本 returned,因此必须通过引用 returned。

构建代码以允许此逻辑同时还允许通过引用 return 的最有效方法是什么?我可以看到两个选项。第一个是将其更改为 return 指向向量的指针而不是引用,然后 return null 而不是空向量。另一个是有一个 static const 空向量和 return 那个。我不是特别喜欢这两个选项,所以我想知道是否有更好的方法。

编辑:请不要将示例函数用作我要说明的内容的文字表示。关键是我有一个函数可以 return 一个充满数据的真实向量,或者它可以 return 一个基于特定条件的默认空向量。另外,如果重要的话,我的真实代码甚至不是 return 一个简单的成员变量,它是一个存储在 hash_map.

中的向量

尽管您犹豫不决,我还是建议您在定义 m_myVector.

的任何地方定义一个 static 空结果向量
std::vector<int>              m_myVector;
static const std::vector<int> m_emptyResult;

然后您的代码既可以编译又可以避免复制。

const std::vector<int>& getMyVector()
{
    if (something)
        return m_emptyResult;

    if (somethingElse)
        return m_myVector;

    return m_emptyResult;
}

或更简洁地说:

const std::vector<int>& getMyVector()
{
    if ( !something && somethingElse )
        return m_myVector;

    return m_emptyResult;
}