根据http://www.example.com,std::vector::operator[]
有两个重载:
reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
为什么我们需要该功能的const
版本?或者,为什么我们不写一个非const函数?
例如,在以下代码中:
std::vector<int> a = {1, 2, 3, 4, 5};
int b = a[1] + a[3]; // Why does it matter if this is const?
答案 0 :(得分:5)
const
时,将调用 const
重载。例如,如果operator[]
上只有std::vector
的非常量重载,则以下代码将拒绝编译:
const std::vector<int> a{10, 20, 30};
int y = a[0];
另一方面,如果我们没有非常量过载,则会失败:
std::vector<int> a{10, 20, 30};
a[0] = 15;
最后,但并非最不重要的是,这些函数都没有返回rvalue
。两者都返回lvalue
。
答案 1 :(得分:0)
const版本用于允许元素访问(只读)常量向量。 没有它,const向量将是WOM。
该函数返回一个const引用,这意味着您不能为其分配新值,但可以将其复制到别处(如果它是可复制的)。
答案 2 :(得分:0)
参考返回版本可以使用括号表示法修改向量:
a[1] = -1;
由于左侧的对象是对向量中条目的引用,因此实际上修改了向量。
const_reference返回版本可以访问const向量的元素。
const vector<int> a {1, 3};
int x = a[0];
如果没有const_reference重载,这将无法编译。