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

Programme in C++. Entwicklerforum
Anonymous
 Warum erfordert STD :: Prädikat * implizite * Konvertierung in Bool?

Post 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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post