考虑以下最小示例。
#include <vector>
class Data
{
std::vector<int>& v;
public:
Data(std::vector<int>& _v) : v(_v) {}
Data(const std::vector<int>& _v) : v(_v) {} // error!
};
int main()
{
std::vector<int> v;
const std::vector<int> c_v;
Data d(v);
Data const_d(c_v);
return 0;
}
这不编译。下面的整个输出g++ -Wall
。
const.cpp: In constructor ‘Data::Data(const std::vector<int>&)’:
const.cpp:8:41: error: invalid initialization of reference of type ‘std::vector<int>&’ from expression of type ‘const std::vector<int>’
原因对我来说很清楚: const 关键字对我在第 8 行中的演员表感到不安。问题:我确实有时需要 Data 类std::vector
,但有时需要const std::vector
。就像有两门课:一门用于阅读Data
,另一门用于阅读Data
。但是,我不喜欢编写两个具有几乎冗余功能的 Data 类。我的问题:
- 你能给出一个很好的解决方案来说明我如何实现我尝试做的事情
main()
吗?C++11 解决方案也很受欢迎:) - 这是
iterator
和的原因const_iterator
吗?