C++ nyelvben ha couttal kiíratunk vagy cinnel bekérünk egy változó értékét, akkor történik imlicit típuskonverzió?
"Ennek a műveletnek van implicit verziójais, amikor nem te hívod meg a konverziós függvényt, hanem az magától történik."
De igen, te hívod meg a függvényt. A >> operátort te hívod meg, és annak a megfelelő implementációja tartalmazza a konverziós logikát.
"Tekintve, hogy direkt számokat nem tudsz bevinni a gépbe, csak a számokat reprezentáló karaktereket, például a 8-ast, 6-ost. így azokat át kell alakítani tényleges számokká."
És ezt csinálja a >> operátor.
"Ugyanennek ellentettje történik akkor amikor egy számot szeretnél kiiratni a konzolra. Ekkor a számsort karakterré konvertálja a géped, szintén implicit (tehát rejtett) módon."
Nope, a << operátor megfelelő implementációját hívod meg, amely elvégzi a szükséges konverziót. Gyakorlatilag ugyanaz, mintha meghívnál egy "printNumberToOutStream" függvényt, csak nem "printNumberToOutStream" a neve, hanem << operator. Alles zusammen, szó sincs implicit konverzióról.
"És ezt csinálja a >> operátor."
Hú, te nagyon hülye vagy ehhez.
Minek erőlködsz?
Az operátor, az nem függvény.
Az az operátor, amibe te itt kapaszkodsz mint hajótörött a WC deszkába, az insertion névre hallgat.
Ez az egyik. A másik, hogy minden konverzió implicit, amiről a fejlesztő nem tud, vagy amiről nem kell tudnia.
Én úgy tudtam, hogy bizonyos operátorok függvények is egyben. Ebben a tananyagban például operátor-függvénynek is nevezik őket:
"Az operátor, az nem függvény."
A büdös életben nem dolgoztál C++ nyelvvel, ha ilyeneket mondasz.
"A másik, hogy minden konverzió implicit, amiről a fejlesztő nem tud, vagy amiről nem kell tudnia."
Ez a te elképzelésed, a *tény* ezzel szemben az, hogy az implicit konverzió egy típus másik típusra való konvertálása olyan esetekben, amikor az eredeti típus nem értelmezhető az adott kontextusban (erre mondtam példaként az array konvertálását pointerré). Nyugodtan nézz utána, mindenhol egyetértés van azt illetően, hogy ezt jelenti az implicit konverzió. Fontos különbség van a "van a típusnak megfelelő függvény implementáció" és a "nincs a típusnak megfelelő függvény implementáció, de a fordító át tudja alakítani a típust valamivé, amire van". Ha konkrétan dolgozni is akarsz a nyelvvel, és nem csak vitatkozni róla egy lepukkant fórumon, akkor nem árt tisztában lenned, milyen konverziókat tud, és milyen konverziókat nem tud magától meglépni a fordító. Hivatkoznék egy korábbi kijelentésemre, a büdös életbe nem fogja a fordító a karakterláncot integerré alakítani. Az, hogy neked beolvasáskor "úgy tűnik" mintha ez történne, az nem arról árulkodik, hogy létezik erre implicit konverzió (merthogy nem létezik), hanem arról, hogy nem ismered eléggé, hogy mi történik pontosan. A nem tudás pedig nem jogosít fel arra, hogy a légből kapott véleményeidet megpróbáld tényszerűnek beállítani.
Tényleg fejezd be, mert nevetséges vagy és félrevezetsz másokat.
Ezt a marhaságot írod:
"Ez a te elképzelésed, a *tény* ezzel szemben az, hogy az implicit konverzió egy típus másik típusra való konvertálása olyan esetekben, amikor az eredeti típus nem értelmezhető az adott kontextusban ("
Sajnos te vagy az, aki képzelődik. Ami te tényként állítasz, az a te hülyeséged.
Ha a kérdező által felvetett dolgot vizsgáljuk, ott is konkrétan tudja a fordító, hogy mire kell castolnia és azt is tudja, hogy milyen tipust kap a std bemenetről.
Van olyan eset is, amit te írsz, de hangsúlyozom, nem kizárólag olyan van, hanem olyan IS van. Te meg azt állítod, mintha csak olyan lenne.
Egy tájékozatlan troll vagy, aki hülyeséget állított és most próbál bizonygatni.
--
Kérdező:
Igen, de az egy egészen más, speciális téma. A + is egy operátor, mégsem lesz belőle soha függvény. Amire te utalsz, az az operátorból kényszerűségből "gyártott" függvény. Egy felüldefiniálása az operátornak. Operator overloading esetén.
Annyit meg kell jegyezzek, hogy matematikailag, elméleti megközelítésben egy operátor nem csak lehet függvény, hanem az is, de a programozói gyakorlatban ez messze nem így néz ki.
Nem, én ennek fordítottját fogom csinálni, meghívok egy függvényt, ami karakter(eke)t vár de int-et fog kapni és hiba nélkül lefut.
var
ezinteger : integer;
ezisinteg : integer;
ezegychar : char;
begin
ezinteger := 96853;
ezisinteg := 6851;
ezegychar := '.'
write(ezinteger,ezegychar,ezisinteg);
end.
Czirkos Tanár úr válasza:
Illetve történik-e implicit típuskonverzió bekéréskor és kiíratáskor?
int a{};
std::cin >> a;
std::cout << a;
"Kiíráskor történhet, de beolvasáskor nem. Azért, mert a beolvasás referenciát vár (int&), és nem lehet konverzió, ha az eredeti változót akarja látni a függvény."
Akkor Czirkos hazudott.
Mindkét esetben történik tipuskonverzió, és ezt ő tudja is.
"Nem, én ennek fordítottját fogom csinálni, meghívok egy függvényt, ami karakter(eke)t vár de int-et fog kapni és hiba nélkül lefut."
Nem karakter. Karakterlánc. String. Hajrá.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!