Page 1 of 1

Warum erfordert STD :: Prädikat * implizite * Konvertierung in Bool?

Posted: 15 Feb 2025, 10:40
by Anonymous
Kann jemand bitte erklären, warum das STD :: Predicate Konzept erfordert, dass das Ergebnis eines Prädikats aufgerufen wird. Kann ein expliziter < /code> als Prädikat verwendet werden)?
Beispiel: < /p>

Code: Select all

class TA
{
public:
operator bool() const noexcept
{
return {};
}
};

class TB
{
public:
explicit operator bool() const noexcept
{
return {};
}
};

void test_predicate()
{
static_assert(std::predicate); //Ok
static_assert(std::predicate); //Failed
}
Tatsächlich werden Prädikate nur in Auswahl- und Iteration -Anweisungen verwendet, und solche Anweisungen ermöglichen die Verwendung von explizitem Bediener bool . Code> Einschränkungen scheinen überflüssig zu sein, und dies hat in der Praxis Konsequenzen. > Einen Wert haben, Sie können einfach schreiben:

Code: Select all

std::count_if(A.begin(), A.end(), std::identity{});< /code> < /p>
, aber Sie können das gleiche nicht mit eingeschränkten
-Algorithmen schreiben:
std::ranges::count_if(A, std::identity{}); \\compile error