Что это за запись в условии?

Есть такой отрывок кода:

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 шт):

Автор решения: HolyBlackCat

, - это оператор, как + или /. 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())), где вместо СделатьХеш какая-то хеш-функция.

→ Ссылка