0

假设我有以下 poc 代码:

const string& a = "hello";
string b = "l";

if(a.at(2) == b)
{
 // do stuff
} 

我知道没有与这些操作数匹配的运算符“==”。并且,修复它的方法是将变量 a 的值转换为 'hello'(而不是双引号)作为 char。

但是,如果我别无选择,只能按照代码所示进行比较,该怎么办。可能吗?您能否就这个问题提供任何指导或建议。

感谢您的回复。

4

2 回答 2

4

您正在比较 a char(具体来说是 a const char)和 a 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)bchar

char b = 'l';
string a = "hello";
if(a[2] == b) { /* .. */ }

另外,你不应该像这样构造一个字符串对象

const string& a = "hello";

除非你真的想创建对另一个字符串对象的引用,例如

string x = "hello";
const string& a = x;
于 2017-12-21T00:18:02.697 回答
1
const string& a = "hello";
string b = "l";

if (a[2] == b[0])
{
    // do stuff
}

a.at(2) 不是字符串。b to b[0] 什么时候解决问题。

于 2017-12-21T00:14:17.403 回答