c++:应对通过引用传递的 stl 容器

c++: Coping to an stl container that is passed by reference

本文关键字:stl 容器 引用 c++      更新时间:2023-10-16

使用以下代码:

class MyClass
{
public:
    void GetStrings(list<std::string>& strs)
    {
        strs = m_strings;
    }   
    list<std::string> m_strings;
}
执行

strs = m_strings;时是否复制了所有m_strings的元素?

换句话说:这等于list<std::string>& strs = m_strings;还是list<std::string> strs = m_strings;(关于元素副本)

是的。

现在,如果您只想复制对列表的引用(就像您在 C# 或 Java 等语言中所做的那样),然后传递一个shared_ptr,那么您将有一个包含 2 个引用的列表。

C/C++ 中的所有变量赋值都是按值完成的,即使传递的变量是指针(例如 4 字节变量)。其他语言也是一样的,只是它们用语言结构掩盖了这一点。