C++ 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

所以大部分情况下,我的向量类都开始工作了,但我又遇到了一个小问题。在重载==运算符内部,我有一个正在执行的if语句,即使它不应该执行

在这里

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()]);
}