Что это за запись в условии?
Есть такой отрывок кода:
std::string successL;
std::string errorL;
std::string getupdate;
std::string LoginHash(std::string hash)
{
for (int i = 10; i <= 25; i++)
{
successL = "loginfound";
errorL = "loginnotfound";
getupdate = "getupdate";
if (hash == successL.c_str(), successL.length())
return successL;
else if (hash == errorL.c_str(), errorL.length())
return errorL;
else if (hash == getupdate.c_str(), getupdate.length())
return getupdate;
}
return false;
}
Я не совсем понимаю это условие:
if (hash == successL.c_str(), successL.length())
У нас сравнивается переменная hash типа string с переменной successL которую мы приводим к си строке.Но потом идет запятая и берется длинна строки successL.Что это за конструкция?Почему компилятор не ругается на запятую?
Ответы (1 шт):
, - это оператор, как + или /. a, b значит то же самое, что и b, за тем исключением, что левый операнд вычисляется перед правым (но в вашем случае это неважно, потому вычисление левого операнда ни на что не влияет).
Значит if (hash == successL.c_str(), successL.length()) эквивалентно if (successL.length()), а это эквивалентно if (successL.length() != 0). Как уже написали в комментах, у вас это условие всегда выполняется, так что return successL; всегда сработает на первой итерации.
Код - кривой и не работает.
Паучье чутье подсказывает мне, что там хотели написать что-то вроде if (hash == СделатьХеш(successL.c_str(), successL.length())), где вместо СделатьХеш какая-то хеш-функция.