取消引用字符串迭代器会产生int

时间:2015-09-15 07:19:13

标签: c++ string iterator dereference

我收到此错误

comparison between pointer and integer ('int' and 'const char *')

以下代码

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    std::string s("test string");
    for(auto i = s.begin(); i != s.end(); ++i)
    {
        cout << ((*i) != "s") << endl;
    }
}

为什么取消引用字符串迭代器会产生int而不是std::string

1 个答案:

答案 0 :(得分:9)

实际上,它不会产生char,它会产生!=(因为字符串迭代器会迭代字符串中的字符)。由于char的其他操作数不是const char[2](它是char),标准促销和转化会应用于参数:

  • int通过积分促销
  • 升级为const char[2]
  • const char*通过数组到指针转换转换为int

这是您到达编译器抱怨的const char*cout << ((*i) != 's') << endl; 个操作数的方式。

您应该将解除引用的迭代器与字符进行比较,而不是字符串:

""

const char[N]包含字符串文字(类型''),char包含字符文字(类型capacity)。