Waar moet ik die -O3 of -O2 neerzetten?quote:Op zondag 5 augustus 2012 00:10 schreef thabit het volgende:
Okee, dan kun je gewoon -O3 (of -O2, is soms sneller) meegeven. Interessant om te kijken of dat nog steeds zo veel tijdsverschil geeft.
Maar dan ook alleen vanwege het probleem met + en -.quote:Op zondag 5 augustus 2012 01:04 schreef t4rt4rus het volgende:
[..]
Maar beste manier is gewoon om `x & 1' te gebruiken.
Ben ik niet met je eens. Hiermee doe je namelijk een gevaarlijke aanname, namelijk dat 'oneven' gelijk is aan 'een 1 op het minst significante bit'. Dit is niet altijd zo: kijk bijvoorbeeld naar negatieve getallen in ones' compliment.quote:Op zondag 5 augustus 2012 01:04 schreef t4rt4rus het volgende:
Maar beste manier is gewoon om `x & 1' te gebruiken.
ones' compliment wordt nergens gebruikt... toch?quote:Op zondag 5 augustus 2012 01:50 schreef GS42 het volgende:
[..]
Ben ik niet met je eens. Hiermee doe je namelijk een gevaarlijke aanname, namelijk dat 'oneven' gelijk is aan 'een 1 op het minst significante bit'. Dit is niet altijd zo: kijk bijvoorbeeld naar negatieve getallen in ones' compliment.
Niet dat ik weet inderdaad, maar het punt blijft.quote:Op zondag 5 augustus 2012 01:54 schreef t4rt4rus het volgende:
ones' compliment wordt nergens gebruikt... toch?
Ok je hebt wel een punt... Maar tochquote:Op zondag 5 augustus 2012 01:56 schreef GS42 het volgende:
[..]
Niet dat ik weet inderdaad, maar het punt blijft.
Misschien iets waar ik zelf een keer flink over gestruikeld ben, namelijk het verschil tussen static_cast en reinterpret_cast en wanneer je welke moet gebruiken. Bijvoorbeeld a) welke je gebruikt om van char naar int te casten, of van void* naar int* en b) waarom. Enig idee?quote:Op zondag 5 augustus 2012 01:57 schreef t4rt4rus het volgende:
[..]
Ok je hebt wel een punt... Maar toch
Is er nog iets leuks in C++ waar we over kunnen praten?
templates, classes?
static_cast is om te casten van int naar double, enum naar int, unsiged <-> signed en van derived classes naar base class.quote:Op zondag 5 augustus 2012 02:03 schreef GS42 het volgende:
[..]
Misschien iets waar ik zelf een keer flink over gestruikeld ben, namelijk het verschil tussen static_cast en reinterpret_cast en wanneer je welke moet gebruiken. Bijvoorbeeld a) welke je gebruikt om van char naar int te casten, of van void* naar int* en b) waarom. Enig idee?
1. static_cast. char en int zijn types die hetzelfde weergeven (getallen), het enige verschil is dat een int meer bytes in beslag kan nemen.quote:Op zondag 5 augustus 2012 03:07 schreef GS42 het volgende:
Dus welke gebruik je om
1. van char naar int en
2. van void* naar int*
te casten en waarom?
Klopt inderdaad. Static_cast kan verschillende dingen doen, maar het converteert altijd tussen gerelateerde typen. Die relatie kan zijn:quote:Op zondag 5 augustus 2012 03:31 schreef t4rt4rus het volgende:
[..]
1. static_cast. char en int zijn types die hetzelfde weergeven (getallen), het enige verschil is dat een int meer bytes in beslag kan nemen.
Ja, dat dacht ik eerst ook. Maar het is dus niet zo: void* is gerelateerd aan alle pointer typen en dus moet je gebruik maken van static_cast. Je hebt gelijk over de functie van reinterpret_cast: deze interpreteert een geheugenadres als een ander type. Hierbij verandert die cast gegarandeerd niets aan het geheugen: alles blijft zoals het is.quote:Ohja was ik nog vergeten te vertellen, reinterpret_cast wil volgens mij alleen maar op pointers omdat deze altijd hetzelfde aantal bytes innemen. char en int kunnen verschillen van grootte en daarom kan een char niet herinterpreteren naar een int.
2. reinterpret_cast omdat je pointer naar een ander type verwijst.
Maar er hoeft helemaal geen werk worden gedaan. Alleen de pointer moet anders geherinterpreteerd worden.quote:Op zondag 5 augustus 2012 11:56 schreef GS42 het volgende:
[..]
Klopt inderdaad. Static_cast kan verschillende dingen doen, maar het converteert altijd tussen gerelateerde typen. Die relatie kan zijn:
- Zelfde soort fundamentele datatypes, zoals char en int beide integer-types zijn. Daarbij kan static_cast directe omzetting van bitpatronen gebruiken (waarbij er indien nodig naar beneden wordt afgerond).
- Een base, parent of composite verbinding van inheritance.
- Een constructor of operator Type() van classes.
Simpel gezegd: er moet een manier zijn om van A naar B te komen. Belangrijk om te realiseren is: static_cast<X>(Y) maakt een nieuw X-object aan en initialiseert dit met Y. Ze hoeven dus niet gelijk aan elkaar te zijn.
[..]
Het belangrijke hier is: een int* kan er anders uitzien in het geheugen dan een void* (of X*). Alleen de grootte is gegarandeerd hetzelfde, niet de memory-layout. DIt betekent dat er misschien werk moet worden gedaan om van een void* een int* te maken. En dat doet reinterpret_cast niet.
Een pointer is ook een object, vergeet dat niet. En een void-pointer hoeft niet gelijk te zijn aan een int-pointer, dus moet er mogelijk werk worden gedaan.quote:Maar er hoeft helemaal geen werk worden gedaan. Alleen de pointer moet anders geherinterpreteerd worden.
Het wordt toegestaan omdat void* aan alle pointer-types is gerelateerd. Immers, void *a = &X is altijd geldig.quote:En ik denk dat ze daarom toe staan om te static casten naar een andere pointer type.
Wat zou er gedaan moeten worden dan?quote:Op zondag 5 augustus 2012 12:16 schreef GS42 het volgende:
[..]
Een pointer is ook een object, vergeet dat niet. En een void-pointer hoeft niet gelijk te zijn aan een int-pointer, dus moet er mogelijk worden gedaan.
Wat er precies gedaan zou moeten worden, maakt niet zoveel uit. Het belangrijke is: C++ geeft geen garanties over pointer-representatie en dus hoeft een X* niet gelijk te zijn aan een Y*. Het kan bijvoorbeeld zo zijn dat een pointer naar een fundamenteel datatype (zoals void) er anders uitziet dan een pointer naar een klasse. Dan moet de een echt in de ander omgezet worden. Dit is niet alleen theoretisch, ik heb mensen gesproken die het probleem ook werkelijk in de praktijk zijn tegengekomen.quote:Op zondag 5 augustus 2012 12:18 schreef t4rt4rus het volgende:
[..]
Wat zou er gedaan moeten worden dan?
Memory adres is een memory adres wat er op de adres staat maakt helemaal niks uit.
In 1998, 2003 en 2011 zijn er nieuwe 'versies' van C++ uitgekomen waarbij vooral dingen zijn toegevoegd. De basis is volgens mij niet zo sterk veranderd en daarom lijkt het me geen probleem om met zo'n boek te beginnen. (Ik ken het boek verder niet, dus dit is algemeen gesteld.)quote:Op zondag 5 augustus 2012 12:59 schreef robin007bond het volgende:
Ik heb dit boek thuis nog liggen (van mijn pa):
http://www.bol.com/nl/p/basiscursus-c/666842990/
Basiscursus C++ van L. Ammeraal uit 1997. Is er in de loop der tijd veel veranderd? Zou ik dit boek nog kunnen gebruiken?
Hmm, oké. Duidelijk.quote:Op zondag 5 augustus 2012 13:17 schreef GS42 het volgende:
[..]
In 1998, 2003 en 2011 zijn er nieuwe 'versies' van C++ uitgekomen waarbij vooral dingen zijn toegevoegd. De basis is volgens mij niet zo sterk veranderd en daarom lijkt het me geen probleem om met zo'n boek te beginnen. (Ik ken het boek verder niet, dus dit is algemeen gesteld.)
Wordt vaak gezegd maar is inderdaad niet helemaal waar. Er zijn dingen die in C legaal zijn maar in C++ niet mogen en er zijn zelfs dingen die in C een andere betekenis hebben dan in C++. Dat gezegd hebbende, er zijn wel erg veel overeenkomsten.quote:Veel mensen raden ook aan eerst C te leren, omdat C++ een superset van C zou zijn. De OP zegt eigenlijk van niet en ik heb er ook mijn twijfels bij.
Wat versta jij onder tutorial?quote:Op zondag 5 augustus 2012 13:48 schreef thenxero het volgende:
Volgens mij is het met uitsluitend tutorials op internet ook wel goed te doen.
Ik bedoel gewoon dat je zo'n beetje alles wel op internet kan vinden, zoals je zelf ook al een beetje aangeeft. Bedankt voor die link trouwensquote:Op zondag 5 augustus 2012 13:52 schreef t4rt4rus het volgende:
[..]
Wat versta jij onder tutorial?
Een professor van mij heeft zelf een boek geschreven en deze staat ook gratis op internet
http://www.icce.rug.nl/documents/cplusplus/
Hebben we niet echt veel aan.quote:Op zondag 5 augustus 2012 13:56 schreef thenxero het volgende:
[..]
Ik bedoel gewoon dat je zo'n beetje alles wel op internet kan vinden, zoals je zelf ook al een beetje aangeeft. Bedankt voor die link trouwens
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |