0

使用以下代码:

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

    list<std::string> m_strings;
}

执行时是否所有m_strings的元素都被复制strs = m_strings;

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

4

1 回答 1

1

是的。

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

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

于 2013-11-06T08:54:03.500 回答