假设我有以下poc代码:
const string& a = "hello";
string b = "l";
if(a.at(2) == b)
{
// do stuff
}
我知道没有匹配这些操作数的运算符“==”。并且,修复它的方法是将变量a的值转换为'hello'(而不是双引号)作为char。
但是,如果我别无选择,只能执行代码中显示的比较。可能吗?能否请您就此问题提供任何指导或建议。
您的回复表示赞赏。
const string& a = "hello";
string b = "l";
if (a[2] == b[0])
{
// do stuff
}
a.at(2)不是字符串。什么时候做b到b [0]问题解决。
你正在比较一个char
(具体是一个const char
)和一个std::string
,其中没有(operator==
)的重载比较运算符。
你有一些选择:
(1)将b
的第一个角色与你想要比较的角色进行比较
string b = "l";
string a = "hello";
if(a[2] == b[0]) { /* .. */ }
(2)将a[2]
转换为std::string
string b = "l";
string a = "hello";
if(string{a[2]} == b) { /* .. */ }
(3)让b
成为char
char b = 'l';
string a = "hello";
if(a[2] == b) { /* .. */ }
此外,您不应该像这样构造一个字符串对象
const string& a = "hello";
除非你真的想要创建对另一个字符串对象的引用,例如
string x = "hello";
const string& a = x;