Mogelijke duplicaten:
Wat is het verschil tussen de punt (.) operator en -> in C++?
Waarvoor is de pijloperator (->) synoniem in C++ ?
De kop zegt het al.
Wat betekent ->in C++?
Antwoord 1, autoriteit 100%
Het is om toegang te krijgen tot een lidfunctie of lidvariabele van een object via een pointer, in tegenstelling tot een reguliere variabele of verwijzing.
Bijvoorbeeld: bij een reguliere variabele of referentie gebruikt u de operator .
om toegang te krijgen tot lidfuncties of lidvariabelen.
std::string s = "abc";
std::cout << s.length() << std::endl;
Maar als u met een aanwijzer werkt, moet u de operator ->
gebruiken:
std::string* s = new std::string("abc");
std::cout << s->length() << std::endl;
Het kan ook overbelast zijn om een specifieke functie voor een bepaald objecttype uit te voeren. Slimme aanwijzers zoals shared_ptr
en unique_ptr
, evenals STL-containeriterators, overbelasten deze operator om de native pointer-semantiek na te bootsen.
Bijvoorbeeld:
std::map<int, int>::iterator it = mymap.begin(), end = mymap.end();
for (; it != end; ++it)
std::cout << it->first << std::endl;
Antwoord 2, autoriteit 75%
a->b
betekent (*a).b
.
Als a
een pointeris, is a->b
het lid b
waarvan a
verwijst naar.
a
kan ook een aanwijzerachtig object zijn (zoals een vector<bool>
‘s stub) die de operatoren overschrijft.
(als je niet weet wat een pointer is, heb je een andere vraag)
Antwoord 3, autoriteit 44%
- Toegangsoperator van toepassing op (a) alle aanwijzertypes, (b) alle typen die deze operator expliciet overbelasten
-
Introducer voor het retourtype van een lokale lambda-expressie:
std::vector<MyType> seq; // fill with instances... std::sort(seq.begin(), seq.end(), [] (const MyType& a, const MyType& b) -> bool { return a.Content < b.Content; });
-
introductie van een trailing return-type van een functie in combinatie met de opnieuw uitgevonden
auto
:struct MyType { // declares a member function returning std::string auto foo(int) -> std::string; };
Antwoord 4, autoriteit 10%
x->y kan 2 dingen betekenen. Als x een aanwijzer is, dan betekent dit lid y van het object waarnaar x wordt verwezen.
Als x een object is met operator->() overbelast, dan betekent dit x.operator->().
Antwoord 5, autoriteit 5%
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B% 2B#Member_and_pointer_operators
a -> b
is lid bvan object waarnaar wordt verwezen door a
Antwoord 6, autoriteit 3%
De operator ->
, die uitsluitend wordt toegepast op aanwijzers, is nodig om het gespecificeerde veld of de opgegeven methode te verkrijgen van het object waarnaar door de aanwijzer wordt verwezen. (dit geldt ook voor structs
alleen voor hun velden)
Als je een variabele ptr
hebt gedeclareerd als een pointer, kun je deze beschouwen als (*ptr).field
.
Een zijknooppunt dat ik toevoeg om pedante mensen blij te maken: ALS BIJNA ELKE OPERATOR kun je een andere semantiek van de operator definiëren door deze te overbelasten voor je lessen.
Antwoord 7, autoriteit 2%
lid b van object waarnaar wordt verwezen door a
a->b