std::common_iterator<I,S>:: operator*,->
|
constexpr
decltype
(
auto
)
operator
*
(
)
;
|
(1) | (seit C++20) |
|
constexpr
decltype
(
auto
)
operator
*
(
)
const
requires /*dereferenceable*/ < const I > ; |
(2) | (seit C++20) |
|
constexpr
auto
operator
-
>
(
)
const
requires /* siehe Beschreibung */ ; |
(3) | (seit C++20) |
|
Hilfstypen
|
||
|
class
/*proxy*/
{
std::
iter_value_t
<
I
>
keep_
;
|
(4) | ( nur zur Darstellung* ) |
Gibt einen Zeiger oder eine Referenz auf das aktuelle Element zurück, oder einen Proxy, der es hält.
Das Verhalten ist undefiniert, falls das zugrundeliegende
std::variant
Mitgliedsobjekt
var
kein Objekt vom Typ
I
enthält, d.h.
std::
holds_alternative
<
I
>
(
var
)
gleich
false
ist.
Sei
it
der Iterator vom Typ
I
, der von
var
gehalten wird, also
std
::
get
<
I
>
(
var
)
.
it
zurück.
-
Entspricht
return
it
;
, falls
Iein Zeigertyp ist oder der Ausdruck it. operator - > ( ) wohlgeformt ist. - Andernfalls entspricht auto && tmp = * it ; return std:: addressof ( tmp ) ; , falls std:: iter_reference_t < I > ein Referenztyp ist.
-
Andernfalls entspricht
return
proxy
(
*
it
)
;
, wobei
proxyeine nur zur Darstellung dienende Klasse ist (4) .
requires
-Klausel ist äquivalent zu
std:: indirectly_readable < const I > && (
requires
(
const
I
&
i
)
{
i.
operator
-
>
(
)
;
}
||
std::
is_reference_v
<
std::
iter_reference_t
<
I
>>
||
std::
constructible_from
<
std::
iter_value_t
<
I
>
,
std::
iter_reference_t
<
I
>>
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
Beispiel
#include <complex> #include <initializer_list> #include <iostream> #include <iterator> using std::complex_literals::operator""i; int main() { const auto il = {1i, 3.14 + 2i, 3i, 4i, 5i}; using CI = std::common_iterator< std::counted_iterator<decltype(il)::iterator>, std::default_sentinel_t>; CI ci{std::counted_iterator{std::next(begin(il), 1), std::ssize(il) - 1}}; std::cout << *ci << ' ' << ci->real() << '\n'; }
Ausgabe:
(3.14,2) 3.14
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3574 | C++20 |
variant
war vollständig constexpr (P2231R1), aber
common_iterator
war es nicht
|
ebenfalls constexpr gemacht |
| LWG 3595 | C++20 | Funktionen des Proxy-Typs hatten kein constexpr und noexcept | hinzugefügt |
| LWG 3672 | C++20 |
operator->
könnte in üblichen Fällen per Referenz zurückgeben
|
gibt immer per Wert zurück |
Siehe auch
Konstruiert einen neuen
common_iterator
(Öffentliche Mitgliedsfunktion) |