取消引用字符串迭代器产生 int
Dereferencing string iterator yields int
我收到这个错误
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
?
实际上,它不会产生 int
,它会产生 char
(因为字符串迭代器迭代字符串中的字符)。由于 !=
的另一个操作数不是 char
(它是 const char[2]
),标准提升和转换应用于参数:
char
通过积分提升int
const char[2]
通过数组到指针转换为const char*
,
这就是您得到编译器抱怨的 int
和 const char*
操作数的方式。
您应该将取消引用的迭代器与 字符进行比较, 而不是 字符串:
cout << ((*i) != 's') << endl;
""
包含一个字符串文字(类型const char[N]
),''
包含一个字符文字(类型char
)。
我收到这个错误
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
?
实际上,它不会产生 int
,它会产生 char
(因为字符串迭代器迭代字符串中的字符)。由于 !=
的另一个操作数不是 char
(它是 const char[2]
),标准提升和转换应用于参数:
char
通过积分提升int
const char[2]
通过数组到指针转换为const char*
,
这就是您得到编译器抱怨的 int
和 const char*
操作数的方式。
您应该将取消引用的迭代器与 字符进行比较, 而不是 字符串:
cout << ((*i) != 's') << endl;
""
包含一个字符串文字(类型const char[N]
),''
包含一个字符文字(类型char
)。