Допустим, у меня есть следующий код 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) не является строкой. когда делать б к б [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;