C++stl错误,因为缺少常量

C++ stl error because of missing const

本文关键字:常量 因为 错误 C++stl      更新时间:2023-10-16

我刚刚纠正了一个错误,但我不明白为什么。这是常数。正确的版本:

#include<iostream>
template <typename T>
T square(T x)
{
    return x*x;
}
template <typename T>
class BoVector{
    T arr[1000];
    int size;
public:
    BoVector():size(0){}
    void push(T x) {arr[size]=x;size++;}
    T get(int i) const {return arr[i];}
    int getSize() const {return size;}
    void print() const {for (int i=0; i< size; i++) std::cout << arr[i] << std::endl;}
};
template<typename T>
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
    BoVector<T> ret;
    for(int i=0; i<rhs1.getSize(); i++){
        ret.push(rhs1.get(i) * rhs2.get(i));
    }
    return ret;
}
int main()
{
//std::cout << square<int>(5) << std::endl;
BoVector<int> bv;
bv.push(2);
bv.push(4);
bv.push(5);
bv.push(100);
//bv.print();
BoVector<int> bv2;
bv2=square(bv);
bv2.print();
}

我犯的错误是,在BoVector类中,我没有成员函数的常量:

T get(int i) {return arr[i];}
    int getSize()  {return size;}
    void print() {for (int i=0; i< size; i++) std::cout << arr[i] << std::endl;}
};

使用const和&这对我来说只是个新鲜事。有人能告诉我为什么这里需要const吗?

如果在const参数上调用operator*中的getsize,则必须指定此方法不会更改对象的状态。因此,有必要将该方法限定为const方法:在const对象(具有const状态的对象(上调用该方法是安全的。

int getsize() const {…}

最好的做法是限定每一个不改变对象状态的方法CCD_ 5和CCD_。

template<typename T>
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
    BoVector<T> ret;
    for(int i=0; i<rhs1.getSize(); i++){

这里的参数rhs1是const,所以你只能在它上面调用const成员函数

BoVector::operator*const BoVector&rhs1rhs2作为参数。因此,不能在它们上调用非const成员函数,也就是说,在rhs1rhs2上调用的所有成员函数都应该是const。因此,如果getSize()get()不是const,您将遇到错误。

您已经定义了使用const:的运算符

BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){