C++ if语句中的条件未满足,但仍在执行
所以大部分情况下,我的向量类都开始工作了,但我又遇到了一个小问题。在重载==运算符内部,我有一个正在执行的if语句,即使它不应该执行 在这里C++ if语句中的条件未满足,但仍在执行,c++,if-statement,C++,If Statement,所以大部分情况下,我的向量类都开始工作了,但我又遇到了一个小问题。在重载==运算符内部,我有一个正在执行的if语句,即使它不应该执行 在这里 bool myStringVector::operator==(const myStringVector& data){ std::cout << this->size() << " " << data.size() << std::endl; if(this
bool myStringVector::operator==(const myStringVector& data){
std::cout << this->size() << " " << data.size() << std::endl;
if(this->size() != data.size())
return 0;
for(int i = 0; i < data.size(); ++i){
std::cout << *(base+i) << " " << *(data.base+i) << ";" << std::endl;
if(*(base+i) != *(data.base+i)){
std::cout << *(base+i) << " " << *(data.base+i) << ";" << std::endl;
return 0;
}
}
return 1;
}
bool myStringVector::operator==(const myStringVector&data){
std::cout size()您正在相互比较C字符串(const char*
)。这不会比较字符串的内容,而是比较它们在内存中存储的位置。您可以使用strcmp
按如下方式对它们进行比较:
bool myStringVector::operator==(const myStringVector& data){
if(size() != data.size())
return false;
for(int i = 0; i < data.size(); ++i){
if(strcmp(base[i], data.base[i]))
return false;
}
return true;
}
您正在比较C字符串(const char*
),这不会比较字符串的内容,而是比较它们在内存中的存储位置。您可以使用strcmp
对它们进行比较,如下所示:
bool myStringVector::operator==(const myStringVector& data){
if(size() != data.size())
return false;
for(int i = 0; i < data.size(); ++i){
if(strcmp(base[i], data.base[i]))
return false;
}
return true;
}
您可以使用base[i]
而不是*(base+i)
base
的类型是什么?它是std::string
的数组还是char*
的数组?我猜您的问题是比较char*指针或类似的东西。您可以使用base[i]
而不是*(base+i)
基的类型是什么?它是一个std::string
数组还是char*
数组?我猜你的问题是你在比较char*指针或类似的东西。好吧,我肯定相信这就是问题所在。谢谢你帮我看。还有一件事,我现在得到一个编译器错误,表明带有strcmp并突出显示base[i]的行。它表示“无法将'myString'转换为'const char*”。这是否是由于在我的复制构造函数中发生的操作造成的?这样看来,您使用的不是const char*
,而是您自己的字符串类型。您可以实现myString::operator==(const myString&)const;
用于字符串,然后您可以简单地使用上述等式。现在效果很好,谢谢。好的,我肯定相信这就是问题所在。感谢您帮助我了解这一点。还有一件事,我现在收到一个编译器错误,它指示带有strcmp的行并突出显示base[I]。它说“无法将“myString”转换为“const char*”。这可能是由于在我的复制构造函数中发生的操作造成的吗?这样看来,您使用的不是const char*
,而是您自己的字符串类型。您可以实现myString::operator==(const myString&)const;
用于字符串,然后您可以简单地使用上述等式。现在效果很好,谢谢。
bool myStringVector::operator==(const myStringVector& data) {
return std::equal(&base[0], &base[size()],
&data.base[0], &data.base[data.size()]);
}