[Megoldva] double& x, vagy double &x ?

Fórumok

A kérdésem a címben szereplő kifejezés C++-ban. A fordító mindkét változatot elfogadja, a program is lefut. Van különbség a kettő között?
Egyik könyvben így, másikban úgy szerepelt.
Előre is köszönöm.

Szerk:
köszönöm a gyors válaszokat, tehát a kettő között lényegi különbség nincsen, mindkét forma ugyanúgy helyes.

Hozzászólások

Nincs. Mindössze értelmezésbeli különbség lehet (változó címe, vagy egy double címe).

Én úgy szoktam, hogy double &x, és azért, mert ha referenciaként adok át mondjuk egy pointert, akkor a double* &x nekem szebb a szememnek, mint a double *&x és a többi változat.
De valaki majd biztosan ad valami jobb, szakmai érvet :)

Én azért szoktam a csillagot és & jelet a változóhoz írni, mert "ahoz tartozik". Ez akkor bukik ki, amikor:

double* foo, bar;

valójában

double *foo, bar;

Tehát egy pointer, egy double, és nem két pointer. Az első felírás számomra félrevezető.

"matyohimezgetes" kozben lehet gondolkozni azon mit is csinal a kod / meg bugokat talani, meg igazabol ha a potyoges idejen mulna hogy mennyi ido valamit megoldani..
meg nekem valahogy vizualisan jobban megjegyezheto az egesz ha szebben tabulalt, kerdes hogy egyszer irt es elfelejtett kodrol van e szo, vagy olyanrol amit aztan n (ahol n nagy) evig tamogatsz

csak az a szar amikor a szepen tabulalt kododba valaki olyan ir bele aki szerint a whitespace ugyse latszik

Azért kíváncsi vagyok, hogy mi szól amellett, hogy a változó nevéhez tartozik az a jelzés, hogy referenciáról, vagy mutatóról van szó. Szerintem sokkal inkább a típushoz tartozik, mert az, hogy pointer vagy referencia, az a változó típusa.

Egyébként meg szerintem alapvetően hiba egy sorban több változót definiálni, kevésbé átlátható lesz tőle a kód. Soha nem értettem, hogy kell a kódban spórolni a hellyel...

Természetesen érthető az érved, nem véletlenül raktam idézőjelek közé a kérdéses mondatot.

Helyspórolás és olvashatóság: Igenis meg nemis. Ha különböző funkciójú változókat raksz egy sorba, ront az olvashatóságon, ha "szinte azonosakat", több kód fér ki egy képernyőre, ami segíti az áttekinthetőséget. De ezt a helyzet, ember és CS válogatja.

Egyszerre két változót nem deklarálsz, és megoldódik ez a probléma. Főleg azért nem, mert több változónál könnyű eltéveszteni, hogy hol is van deklarálva (ja, ebben a sorban a 4. változó a 10 közül, hoppá).

És sajnos nem a változóhoz tartozik:
double* foo;
double bar;

Mi a foo típusa? "double*", nem pedig "double".
Mi a bar típusa? "double".

Ha a változóhoz tartozna, akkor a foo és a bar mindegyike double lenne, ami nyilvánvalóan nem igaz.

Amúgy meg teljesen mindegy, a csillag (*) vagy az és jel (&) hol van, a lényeg, hogy következetes legyen.

Szerk:
Nekem mindkét forma félrevezető tud lenni:
double *foo, bar;
double* foo, bar;

Miért? Mert meglátom a csillagot a foo-nál (típushoz vagy változónévhez ragasztva, oly mindegy), és szinte automatikusan hozzáteszem a csillagot a bar-hoz is, függetlenül attól, hogy valóban ott van-e (olvastam-e ott). Persze nem mindig, de könnyen előfordulhat.