通过引用返回 std::Vector<> 很慢?

Return std::Vector<> by reference is slow?

本文关键字:lt gt 很慢 Vector 引用 返回 std      更新时间:2023-10-16

我已经对此进行了测试,与直接抓取成员相比,通过引用传递的速度大约是其两倍。 例如 -

class Mesh {
    public:
        inline std::vector<Vector3>& GetVertices() { return m_vertices; }
    private:
        std::vector<Vector3> m_vertices;
};

如果我经常调用 GetVertices() 来获取顶点,它比直接访问m_vertices要慢得多。但我想m_vertices保密。我能做什么?

为什么它更慢?

编译器将内联该代码并将其转换为对成员的直接访问(在除以下内容以外的任何优化级别中)

有没有你没有显示的虚拟功能?也许Mesh是一个子类,而 GetVertices() 是一个通过基类调用的纯虚函数?这会稍微减慢速度。

如果可以的话,另一种可能性是返回常量引用而不是非量引用。