通过 const rerefence 传递向量并向向量添加元素
Passing a vector by const rerefence and adding an element to the vector
我正在尝试理解以下成员函数:
void Date::setDays(const std::vector<Date> &days){
Date d(1, 1, 1);
m_days = days;
m_days.push_back(d); // valid.
days.push_back(d); // invalid.
}
在上面属于 class Date
的成员函数中,我通过引用将 days
作为常量传递。我能理解为什么在 days
中添加一个元素是非法的,因为它是 const
。但是,我的困惑是,我怎么可能向 m_days
添加一个元素?它不是指与 days
相同的向量吗?当我向 m_days
添加一个元素时,是否意味着我也在向 days
添加一个元素?
m_days = days
对 days
数组进行 copy,即 m_days
是另一个独立于 days
的向量,它具有days
数组的副本。您对 m_days
所做的任何更改都不会影响 days
。因此,days
的常量性没有被违反。
您分配 m_days
days
的 副本 。它是 not 相同的向量,如果 m_days
不是 const
(显然不是,因为你刚刚分配给它)然后向它添加元素只是美好的。您对 m_days
所做的任何事情都不会以任何方式影响 days
。
我正在尝试理解以下成员函数:
void Date::setDays(const std::vector<Date> &days){
Date d(1, 1, 1);
m_days = days;
m_days.push_back(d); // valid.
days.push_back(d); // invalid.
}
在上面属于 class Date
的成员函数中,我通过引用将 days
作为常量传递。我能理解为什么在 days
中添加一个元素是非法的,因为它是 const
。但是,我的困惑是,我怎么可能向 m_days
添加一个元素?它不是指与 days
相同的向量吗?当我向 m_days
添加一个元素时,是否意味着我也在向 days
添加一个元素?
m_days = days
对 days
数组进行 copy,即 m_days
是另一个独立于 days
的向量,它具有days
数组的副本。您对 m_days
所做的任何更改都不会影响 days
。因此,days
的常量性没有被违反。
您分配 m_days
days
的 副本 。它是 not 相同的向量,如果 m_days
不是 const
(显然不是,因为你刚刚分配给它)然后向它添加元素只是美好的。您对 m_days
所做的任何事情都不会以任何方式影响 days
。