2017-09-28 6 views
-3

Beispiel:Kann eine einfache Referenz nicht an ein Literal gebunden werden?

auto &h = 42;  // error:we can't bind a plain reference to a literal. 
const auto &j = 42; // right 

Ich verstehe nicht, warum Compiler nicht &h wissen kann, ist `const int & ich meine, "auto" ist in zwei Schritten haben: 1.know welche Art von R-Wert. 2.Vergewissern Sie sich, dass lvalue zum Typ wird, wenn der Schritt richtig ist, warum müssen wir "const" hinzufügen, wenn rvalue literal ist?

+0

Mögliches Duplikat von [Warum erweitern const-Referenzen die Lebensdauer von rvalues?] (Https://stackoverflow.com/questions/39718268/why-do-const-references-ext-the-lifetime-of-rvalues) –

+4

Sie sollten wissen, dass es nicht "const int &" ist, der Compiler ist nicht durcheinander. Es ist ein "int" reiner rvalue. Die Tatsache, dass eine const-Referenz an sie gebunden ist, bedeutet nicht, dass es sich um einen konstanten Referenztyp handelt. – StoryTeller

+1

@StoryTeller _Sie sollten wissen_ klingt sehr nach _C++ ist eine expertenfreundliche Sprache_ in der Tat. :-D – skypjack

Antwort

1

auto leitet nie eine const ab, wenn die Eingabe nicht const war. Da 42int hat, dann folgert auto zu int Typ und Code entspricht:

int& h = 42; 

die ein Fehler ist, weil eine nicht-const lvalue Bezugnahme auf ein prvalue nicht binden können.

+0

danke sehr mampf! – wuduojia

Verwandte Themen