由于缺少 const,C++ stl 错误
C++ stl error because of missing const
我刚刚纠正了一个错误,但我不明白为什么。它是常量。
正确版本:
#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();
}
我犯的错误是在 class 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?
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&
s rhs1
和 rhs2
作为参数。因此,您不能在它们上调用非 const
成员函数,即,您在 rhs1
和 rhs2
上调用的所有成员函数都应该是 const
。因此,如果 getSize()
或 get()
不是 const
.
,您将 运行 出错
您已经定义了与 const 一起使用的运算符:
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
您在 operator*
中对 const
参数调用 getsize
,然后您必须指定此方法不会更改对象的状态。因此有必要将该方法限定为 const
方法:一种可以安全地调用 const 对象(具有 const 状态的对象)的方法。
int getsize() const {…}
最佳做法是限定每个不改变对象状态的方法; 即 print
和get
.
我刚刚纠正了一个错误,但我不明白为什么。它是常量。 正确版本:
#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();
}
我犯的错误是在 class 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?
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&
s rhs1
和 rhs2
作为参数。因此,您不能在它们上调用非 const
成员函数,即,您在 rhs1
和 rhs2
上调用的所有成员函数都应该是 const
。因此,如果 getSize()
或 get()
不是 const
.
您已经定义了与 const 一起使用的运算符:
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
您在 operator*
中对 const
参数调用 getsize
,然后您必须指定此方法不会更改对象的状态。因此有必要将该方法限定为 const
方法:一种可以安全地调用 const 对象(具有 const 状态的对象)的方法。
int getsize() const {…}
最佳做法是限定每个不改变对象状态的方法; 即 print
和get
.