Proto mohu nastavit existující odkaz na doslovné hodnoty v C ++?

hlasů
0

Zvažte následující:

int ival = 1.01;
int &rval = 1.01; // error: non-const reference to a const value.
int &rval = ival;

rval = 1.01;

První přiřazení a rval na doslovný hodnotu selže, jak se očekávalo. Kdybych komentář mimo tento řádek kódu kompiluje a běží. Chápu, proč inicializace selže, ale jsem zmatená, proč přiřazení rval pracuje v posledním řádku. Nemyslel jsem, že to bylo umožněno přiřadit odkaz na doslovný hodnotu.

EDIT: Díky za rychlé odpovědi. Jsem v pokušení smazat skrýt svou hanbu, ale myslím, že to nechám tady, takže všichni ostatní mohou poukázat i smát.

V mé vlastní obranu, já pracuji přes cvičení v knize (C ++ Primer) a tento problém je o referenční inicializaci . Přesto je to docela trapné mít tak zcela přehlíží bod odkazu na prvním místě. :)

Položena 11/01/2009 v 03:31
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
6

Poté, co referenční inicializaci, je to alias na to, co bylo k inicializaci. Jakmile je referenční inicializaci, nelze změnit, co se odkaz odkazuje. Nicméně můžete změnit ‚věc‘ se odkaz odkazuje (v případě, že odkaz není const).

Poslední řádek je v podstatě nastavením proměnné ival1,01 (opět).

Odpovězeno 11/01/2009 v 03:35
zdroj uživatelem

hlasů
6

ivalnení doslovný hodnotu, 1.01je doslovný hodnotu. Je to byly zkopírovány do ivalkteré je proměnná, která rozhodně může mít to reference přiřazené k jiné proměnné.

Odpovězeno 11/01/2009 v 03:35
zdroj uživatelem

hlasů
4

Zde je něco, co může být překvapeni tím, že vám mohou udělat i když:

const int& x = 42;        // No error!

C ++, napomáhá Inicializace const reference doslovný hodnoty (nebo jiné rvalue). Co se vlastně stane, je, že kompilátor vytvoří dočasný zkopírováním RHS a inicializuje odkaz na odvolat se, že dočasná. Kompilátor zajišťuje, že dočasný zůstane naživu, dokud exit rozsahu (tj kdykoli xdostane mimo rozsah v tomto případě).

Všimněte si, že tento postup nefunguje při inicializaci proměnné členů třídy.

Tricky co? :)

Odpovězeno 11/01/2009 v 05:56
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more