通过const引用传递向量并向向量添加元素

问题描述 投票:0回答:2

我试图了解以下成员函数:

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.
}

在属于类Date的上面的成员函数中,我通过引用传递days作为const。我可以理解为什么将一个元素添加到days是非法的,因为它是const。但是,我的困惑是,我怎么可能向m_days添加一个元素?它不是指与days相同的向量吗?当我向m_days添加一个元素时,它是否意味着我也在向days添加一个元素?

c++ const pass-by-reference
2个回答
2
投票

你给m_days分配了days的副本。它不是相同的向量,如果m_days不是const(它显然不是因为你刚刚分配给它),那么添加元素就好了。你对m_days所做的一切都不会以任何方式影响days


2
投票

m_days = days制作了days阵列的副本,即m_days是另一种独立于days的载体,它具有days阵列的副本。您对m_days所做的任何更改都不会影响days。因此,没有违反days的常数。

© www.soinside.com 2019 - 2024. All rights reserved.