A C++ szintaktikája C#-os szemmel
2014-02-27T14:09:02+01:00
2014-03-01T21:32:12+01:00
2022-06-29T09:41:57+02:00
  • > Console osztály tartalmaz minden függvény ami oda tartozik és ebből egyet meghív.

    Azt hallottad már, hogy 'standard input/output'? A program írásakor még nem kell tudjad, hogy képernyőre/fájlba/socketbe megy-e a standard output... (Olyan misztériumok ezek, amiket a mai 'betanított munkás' programozók talán nem is tudnak.)
    Mutasd a teljes hozzászólást!
  • Ha írsz egy ilyet:

    namespace Console { void WriteLine( const char * txt ) { std::cout << txt << std::endl; } }
    máris írhatsz ilyet:

    Console::WriteLine( "Hello, World!" );

    Azt nem tudom, C#-ban mit kell írni, hogy utána írhass cout << "Hello, world"-öt.

    Console osztály tartalmaz minden függvény ami oda tartozik

    Na de a kiírás a konzol, vagy az kiírt típus függvénye? Mi a helyzet, ha fájlba akarsz írni?

    Illetve milyen dolog az, hogy Console-t kell írnom akkor is, ha a programom kimenete egy pipe-ba kerül?
    Hisz akkor szó sincs konzolról.

    A cout az std::cout, vagyis nem szennyezi a globális névteret.

    Az operátoroknak saját típusok esetén saját jelentést adhatsz. Ez szerintem erősség, nem gyengeség.

    A C++ nem kényszerít semmire. A pointerek azért vannak a nyelvben, mert nagyon sok gépi (és program-) nyelv
    használ ennek megfelelő mechanizmusokat évtizedek óta. Ezért tudom lefordítani a C++-ban írt programok nagy részét
    a 32MB memóriával rendelkező ARM-es routerre, ami a nyelv kidolgozásakor még nem is létezett.
    Viszont nem igazán tudom futtatni rajta a legegyszerűbb C#-os programokat sem.

    Több olyan c++ fordító van, ami egyszer fordítja le a header fájloikat.

    A C# biztosan kényelmesebb, de vegyük észre, hogy volt 10-15 évük a fejlesztőinek, hogy tanuljanak a korábbi nyelvekkel (pl. C++-szal, Java-val) szerzett tapasztalatokból.

    Egyben gratulálok, egy hozzászólással négy oldalnyi vitát generáltál. Lehet, hogy ez rekord?
    Mutasd a teljes hozzászólást!
  • Ez, hogy egyeztetheto ossze a te ertelmezeseddel?

    13.3.1.2 Operators in expressions

    2. If either operand has a type that is a class or an enumeration, a user-defined operator function might be declared that implements this operator or a user-defined conversion can be necessary to convert the operand to a type that is appropriate for a built-in operator. In this case, overload resolution is used to determine which operator function or built-in operator is to be invoked to implement the operator.
    Mutasd a teljes hozzászólást!
  • Szintaktikai szinten nincs értelme ennek a vitának, hiszen mindent lehet többféle módon leírni. Hm?

    Ne folytasd, nincs értelme...
    Mutasd a teljes hozzászólást!
  • Szemantikai szinten nincs értelme ennek a vitának, hiszen mindent lehet többféle értelemben használni.

    Szintaktikai szinten nincs értelme ennek a vitának, hiszen mindent lehet többféle módon leírni. Hm?

    Ellenben még akkor sem igaz az, hogy ugyanúgy különbözik az unary operátor* a binary*-tól, mint a sztring+ a numerikus+-tól.

    Sőt, nagyon sok más állítás sem igaz, amiket - hasonlóan ehhez - soha, senki sem mondott.
    Mutasd a teljes hozzászólást!
  • Szemantikai szinten nincs értelme ennek a vitának, hiszen mindent lehet többféle értelemben használni. Ellenben még akkor sem igaz az, hogy ugyanúgy különbözik az unary operátor* a binary*-tól, mint a sztring+ a numerikus+-tól. Az viszont igaz, hogy mindent lehet többféle értelemben használni, de ez egy semmitmondó kijelentés lenne.
    Mutasd a teljes hozzászólást!
  • Hát, persze. Amíg (csak) szintaktikáról beszélünk, addig minden nagyon mélyszakmai. Ha már szemantikáról (is), akkor az már kocsmai agymenés. Logikus.
    Mutasd a teljes hozzászólást!
  • Operator tulajdonságai számomra (szerintem ez az elterjedt):
    precedencia a többi operátorhoz képest, kiértékelés iránya, argumentumok száma, operátor jelölése.

    Példa matematikában a + operátor valósakra meg egészekre nézve (megfelel mondjuk a standard által definiált operator+-nak)
    A komplexekre értelmezem az összeadást, akkor ez most egy új operátor, vagy sem?
    Mutasd a teljes hozzászólást!
  • Mert ugyan miért is használnánk (kizárólag) nyelvtani értelemben, amikor nem egy (kizárólag) nyelvtani szerkezet?

    Persze lehet akármilyen értelemben használni, de mint mondottam, arra én már nem vagyok kíváncsi. Nekem az már nem szakmai/technikai jellegű vita, hanem valami bulvár/filozófiai vita. Ha kocsmai agymenésekre vágyom, akkor inkább elmegyek egy kocsmába.
    Mutasd a teljes hozzászólást!
  • Nem azonos az operátor definíciótok, innentől elbeszéltek egymás mellett.

    Sting beleveszi a paramétereket is a definíciójába (operator-function-id), míg nyelvtani szinten (operator token) nincsenek benne a paraméterek típusai.
    Valahol értelemszerűen meg kell, hogy legyen különböztetve, hiszen az overloading során más-más funkcionalitást adunk neki.

    Az operatorOverloading -> overload. Logikusabb lenne a nyelvtani szintet alapul venni. Túltöltjük/terheljük. Sehol egy szóval nem említi, hogy új operátor-t hozunk létre. Meglévőnek adunk új funkcionalitást/implementációt.
    Operators in C and C++ - Wikipedia, the free encyclopedia
    Mindenhol úgy vannak értelmezve az operátorok, hogy maga token meghatározza igazából.



    Ezen is vitázhatnánk:
    Vannak az evőeszközök: kanalak, kések, villák

    Én kíszítek magamnak egy spagetti evő villát és azt mondom, hogy ez egy teljesen új evőeszköz, egyenrangú az előzőekkel. Mások szerint meg csak egy 'túlterhelt' specializált villa..

    Értelmetlen vita..
    Mutasd a teljes hozzászólást!
  • Egyszerűen félreérted a specifikációt.

    Szerinted. De mint mondtam ebben a kérdésben inkább nem hagyatkoznék most a te véleményedre. Ha nem túl nagy baj.

    Vagy mint korábbi hozzászólásból kiderült, nem nyelvtani értelemben használod az összeadás operátort

    Mert ugyan miért is használnánk (kizárólag) nyelvtani értelemben, amikor nem egy (kizárólag) nyelvtani szerkezet? A C++ specifikáció sem csak nyelvtani szabályokat határoz meg, az operátorok vonatkozásában sem. Az operátorok is - mint a legtöbb más nyelvi szerkezet (kivéve makrókat, illetve egyes preprocesszor-direktívákat) - nem csak nyelvtani szerkezettel, hanem szemantikai tartalommal is rendelkeznek. Ennek megfelelően csakis utóbbival együtt, egészében lehet és értelmes vizsgálni őket.

    A szintaktikai sajátosságok elkülönítésének, kiemelésének és önálló vizsgálatának a programok írása során az ég egy adta világon semmi értelme nincsen. Kivéve persze ha az a program amit írunk éppen egy C++ nyelvi elemző.
    Mutasd a teljes hozzászólást!
  • Mégis a C++ nyelvben egy nyelvtani szerkezetről hogy döntöd el hogy azonos vagy nem

    De nem érdekel minket, hogy nyelvtanilag azonosak -e vagy sem. Nem (csak) nyelvtani, hanem szemantikai azonosságot (is) vizsgálunk.

    De a vitát ezzel lezárhatjuk, hogyha nem a nyelvtant veszed alapul, hanem mást, akkor persze különböző.

    Az első értelmes mondat a témában, hosszú idő óta. Köszi.
    Mutasd a teljes hozzászólást!
  • De mint mondtam én inkább a C++ specifikációra hallgatok. Ő meg történetesen tök mást mond, mint amit te szajkózol.

    Egyszerűen félreérted a specifikációt. Vagy mint korábbi hozzászólásból kiderült, nem nyelvtani értelemben használod az összeadás operátort, hanem valami más, számomra ismeretlen értelemben, amire igazából nem is vagyok kíváncsi.
    Mutasd a teljes hozzászólást!
  • Ezért is tök szerencse, hogy nem azt írtam, hogy "mi a nyelvtani különbség a numerikus összeadás és a sztringkonkatenátor operátor között", hanem azt, hogy "mi a különbség numerikus összeadás és a sztringkonkatenátor operátor között".

    Ügyesen kisasszézol. Mégis a C++ nyelvben egy nyelvtani szerkezetről hogy döntöd el hogy azonos vagy nem, ha nem a nyelvtant veszed alapul? De a vitát ezzel lezárhatjuk, hogyha nem a nyelvtant veszed alapul, hanem mást, akkor persze különböző.

    A C++ specifikáció sajnos nem ért egyet veled. Szerinte az amit te az "operator+"-nak hívsz az egy "operator token", az pedig amit az "operator+ túltöltésének implementációja"-nak, az maga az "operátor". Amikből szerinte sok-sok darab lehet - gyakorlatilag korlátlan számú.Szerintem nem értettem meg a specifikációt. Az előbb idéztem be a releváns részt.

    http://forum.prog.hu/tarsalgo/?fid=175686&op=new&irt=73

    Innen:
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf

    A 311-es oldaltól kezdve van kifejtve, hogy mi az operator túltöltés.

    Ez így megvan?
    An operator function is said to implement the operator named in its operator-function-id

    Operátor függvények implementálnak operátorokat.

    Eddig ok?

    A függvények túltölthetők?

    Ez ok?
    Mutasd a teljes hozzászólást!
  • Ja, hallottam már ezt a véleményt tőled. De mint mondtam én inkább a C++ specifikációra hallgatok. Ő meg történetesen tök mást mond, mint amit te szajkózol. Én inkább neki hiszek. Ugye nem gond? Azért még barik maradunk?
    Mutasd a teljes hozzászólást!
  • Te nem erted meg, hogy nincs olyan, hogy string konkatenator operator, hanem az additiv operator(+) van feluldefinialva stringekre mint konkatenacio.
    Mutasd a teljes hozzászólást!
  • "mi a különbség a numerikus összeadás és a sztringkonkatenátor operátor"Nyelvtanilag ilyenek nincsenek.

    Ezért is tök szerencse, hogy nem azt írtam, hogy "mi a nyelvtani különbség a numerikus összeadás és a sztringkonkatenátor operátor között", hanem azt, hogy "mi a különbség numerikus összeadás és a sztringkonkatenátor operátor között".

    A "sztringkonkatenátor" egy könyvtári osztály operator+ túltöltésének implementációja.

    A C++ specifikáció sajnos nem ért egyet veled. Szerinte az amit te az "operator+"-nak hívsz az egy "operator token", az pedig amit az "operator+ túltöltésének implementációja"-nak, az maga az "operator". Amikből szerinte sok-sok darab lehet - gyakorlatilag korlátlan számú. Remélem nem veszed rossz néven, de én ebben az ügyben és most inkább a C++ specifikáció véleményére adnék a tiéd helyett (is).

    A numerikus összeadás is + operátort használ, de ennek "beépített implementációja" van primitív típusokra. 

    Igen. Az ég meg kék, a fű pedig zöld. Látod milyen jól tudok én is irreleváns evidenciákat beírogatni?
    Mutasd a teljes hozzászólást!
  • mi a különbség a numerikus összeadás és a sztringkonkatenátor operátor

    Nyelvtanilag ilyenek nincsenek. A "sztringkonkatenátor" egy könyvtári osztály operator+ túltöltésének implementációja. A numerikus összeadás is + operátort használ, de ennek "beépített implementációja" van primitív típusokra.
    Mutasd a teljes hozzászólást!
  • Ezt most direkt csinálod? a + operátort, mint nyelvtani szerkezetet kismillió túltöltött függvény tudja implemntálni, erre épül az egész << stream operátorosdi stream esetén.
    Mutasd a teljes hozzászólást!
  • Jó. Tehát akkor összefoglalva az a konklúzió, hogy erdeszt nem tudja és nem érti (vagy legalábbis eddig nem tudta és nem értette), hogy mi a különbség a numerikus összeadás és a sztringkonkatenátor operátor között, illetve, hogy ezek nem azonosak. De leáll vitatkozni róla.

    Szép. Azért örülük, hogy vége lett. És hát még erdeszt is tanult valamit. Legközelebb már talán a printf() függvény rejtélyeivel is megismertethetjük őt. Persze csak lassan, óvatosan.
    Mutasd a teljes hozzászólást!
  • Te, azt hiszem kicsit (nagyon) eltévedtél. Egyrészt már teljesen követhetetlen és érthetetlen, hogy mit akarsz megerősíteni vagy cáfolni - ha egyáltalán akarsz bármit is. Mert nekem csak úgy tűnik, hogy random linkelgetsz ide-oda doksikra.

    Légszi' olvasd már vissza a topikot! Csak azért, mert amiket itt idézgetsz, linkelgetsz, azokon már rég túl vagyunk. Nem mellesleg azok nagy részét (pl. az operátor-túltöltésről szóló részt) korábban pont én idéztem be, pont azért, mert engem igazolt. Bár mindegy is, mert kiderült, hogy erdeszt már az elején benézte és azóta sem értette, hogy miről van szó. Egészen mostanáig.
    Mutasd a teljes hozzászólást!
  • Tehát itt megjelenik a korábban már -- úgy rémlik -- emlegetett szétválasztás, miszerint operátor és operátor függvény... (kár, de most nem találom a popcorn smiley-t)
    Mutasd a teljes hozzászólást!
  • http://kepfeltoltes.hu/140228/stinghulye_www.kepfeltoltes.hu_.png

    Gondolom ez megint csak egyedul neked okozott gondot.
    Mutasd a teljes hozzászólást!
  • Jó, én már overloaded operátor fejezetet linkeltem, de ott van a nyelvtan is:

    https://github.com/cplusplus/draft/blob/master/source/grammar.tex#L688
    Mutasd a teljes hozzászólást!
  • Akkor a linkelt doksi 311-es oldalától:

    A function declaration having one of the following operator-function-ids as its name declares an  operator function.

    Operátor függvényeket lehet létrehozni ha a függvény neve tartalmazza az operator kulcsszót és utána az operátor azonosítóját.
    Ez az operátor túltöltés.

    An operator function is said to implement the operator named in its operator-function-id.

    Ekkor azt mondjuk, hogy implementáltuk az operátort.

    Amelyek a következők lehetnek:

    Itt vannak binary és unary operátorok.


    Szóval operátorokat "túl lehet tölteni", azaz függvényként implementálni őket.
    Ugyanakkor a függvényeket is túl lehet tölteni, de ettől még ugyanazt az operátort implementálják.
    Mutasd a teljes hozzászólást!
  • 2, Te nem az additiv operator definiciojat irtad

    Nem hát. Én a sztringkonkatenátor-operátor definícióját írtam le. Ugyanis a topik elejétől kezdve erről volt szó. Erről beszéltem én is, és erre reagáltál te is.

    Szóval akkor a konklúzió az, hogy neked végig, az elmúlt 70 hozzászólás alatt sem esett le - annak ellenére, hogy kb. vagy 50x le lett írva, így szó szerint, hogy - a sztringkonkatenátor operátor és az numerikus összeadás operátor azonosságáról (ill. annak hiányáról) van szó?

    Hát, engedd meg, hogy gratuláljak ehhez a kiváló szövegértéshez, alapos és figyelmes olvasáshoz, és főleg a rendkívül cizellált és kiforrott vitatechnikádhoz! Érdemes volt tegnap és ma is felkelnem. Köszi.
    Mutasd a teljes hozzászólást!
  • Hahahahaha.
    Mutasd a teljes hozzászólást!
  • 1, Az, hogy egy adott nyelvben mi az operator azt az adott nyelv definialja, az, hogy c++ eseten ezek mik mar belinkeltem.
    2, Te nem az additiv operator definiciojat irtad le hanem annak egy string-ekre overload-olt implementaciojat.
    Mutasd a teljes hozzászólást!
  • Sőt kint van a github-on a jelenlegi draft Latex formátumban:
    https://github.com/cplusplus/draft/blob/master/so&#8203;urce/overloa..

    Fantasztikus. Esetleg nem tudnál még pár tucat további linket küldeni olyan oldalakra ahol NEM az található meg és látható amit korábban linkeltél? Az eddigiek mellé, amiken szintén NEM az volt megtalálható és látható, igencsak jól jönne. Hogy ne legyenek olyan egyedül.
    Mutasd a teljes hozzászólást!
  • Neked az 1176-os oldalon nem a  Annex A (informative) Grammar summary van?

    Na, most akkor olvasd el még egyszer, hogy mit írtam az előbb! Bemásolom neked ide, hogy kényelmesebb legyen:
    "Hát, én ennek az 1176. oldalán semmi olyan táblázatot nem látok, mint amilyen a korábban linkelt HTML oldalon volt."
    Mutasd a teljes hozzászólást!
abcd