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

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum erfordert STD :: Prädikat * implizite * Konvertierung in Bool?

by Anonymous » 15 Feb 2025, 10:40

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

Top