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
Gelukkig bestaat er zoiets als Google om je over die zee van informatie te navigeren.quote:Op zondag 5 augustus 2012 14:00 schreef t4rt4rus het volgende:
[..]
Hebben we niet echt veel aan.
Dan kan ik ook zeggen zo'n beetje alles wel op aarde te vinden is.
Maar google weet niet of iets ook waardevolle informatie bevat.quote:Op zondag 5 augustus 2012 14:01 schreef thenxero het volgende:
[..]
Gelukkig bestaat er zoiets als Google om je over die zee van informatie te navigeren.
hehe dat is nou net een site die foute informatie bevat...quote:Op zondag 5 augustus 2012 14:06 schreef thenxero het volgende:
Ik vond dat deze site waardevolle informatie bevat, en die komt gewoon als eerste resultaat als je op c++ tutorial zoekt.
Dat zal wel, bijna iedere informatiebron bevat foute informatie.quote:Op zondag 5 augustus 2012 14:07 schreef t4rt4rus het volgende:
[..]
hehe dat is nou net een site die foute informatie bevat...
Heb veel C++ experts horen zeggen dat je daar echt niet veel aan hebt.quote:Op zondag 5 augustus 2012 14:08 schreef thenxero het volgende:
[..]
Dat zal wel, bijna iedere informatiebron bevat foute informatie.
Check dit eensquote:Op zondag 5 augustus 2012 14:07 schreef t4rt4rus het volgende:
[..]
hehe dat is nou net een site die foute informatie bevat...
Dat boek is kut, behandelt overerving geloof ik niet eens.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?
Ah, leuk, jij studeert dus ook in Groningen? Als je de kans hebt, moet je echt de drie-delige C++ cursus van Brokken doen; die begint vast na de zomer weer. Heb ik dus ook gedaan.quote: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/
In een basisboek lijkt dat me niet zo'n probleem. Als het de basis wel goed behandelt, lijkt het me nog geen kutboek. Maar nogmaals, ik ken het boek dus niet.quote:Op zondag 5 augustus 2012 14:22 schreef thabit het volgende:
Dat boek is kut, behandelt overerving geloof ik niet eens.
't Is op wel meer punten suboptimaal, dat je C++ op een verkeerde manier aanleert.quote:Op zondag 5 augustus 2012 14:55 schreef GS42 het volgende:
[..]
Ah, leuk, jij studeert dus ook in Groningen? Als je de kans hebt, moet je echt de drie-delige C++ cursus van Brokken doen; die begint vast na de zomer weer. Heb ik dus ook gedaan.
[..]
In een basisboek lijkt dat me niet zo'n probleem. Als het de basis wel goed behandelt, lijkt het me nog geen kutboek. Maar nogmaals, ik ken het boek dus niet.
Wanneer heb jij die gedaan?quote:Op zondag 5 augustus 2012 14:55 schreef GS42 het volgende:
[..]
Ah, leuk, jij studeert dus ook in Groningen? Als je de kans hebt, moet je echt de drie-delige C++ cursus van Brokken doen; die begint vast na de zomer weer. Heb ik dus ook gedaan.
Ik heb de cursus in 2009-2010 gedaan. En ik studeer ook geen informatica hoor (en heb ook niet alle studiepunten voor de cursus erkend gekregen) maar dat is toch geen reden om een leuk vak niet te doen?quote:Op zondag 5 augustus 2012 15:11 schreef t4rt4rus het volgende:
Wanneer heb jij die gedaan?
edit:
En ja ik studeer in Groningen maar geen informatica.
Oh, ik denk dat ik wel een compleet antwoord kan geven: ja, dat is mogelijk.quote:Op maandag 6 augustus 2012 18:25 schreef thenxero het volgende:
Ik verwacht geen compleet antwoord... maar is het voor een dummy mogelijk om een GUI te schrijven? Of moet je daar al aardig gevorderd voor zijn? Of is het beter om er niet aan te beginnen en het misschien met C# te doen?
Okequote:Op maandag 6 augustus 2012 18:37 schreef GS42 het volgende:
[..]
Oh, ik denk dat ik wel een compleet antwoord kan geven: ja, dat is mogelijk.
Je hebt wel een pakket nodig dat de GUI-zaken voor je regelt, maar daarna is het gewoon gebruik maken van een interface. Het lastigste is misschien nog wel zo'n pakket installeren. Zelf heb ik wel met Qt gespeeld (nooit iets serieus mee gemaakt), maar als je dat installeert denk ik dat je binnen een uur een voorbeeld hebt aangepast en gecompileerd.
Programmeertechnisch is het niet ingewikkeld; je moet alleen wel willen leren te werken met een nieuw pakket.
Neequote:Op maandag 6 augustus 2012 20:03 schreef thenxero het volgende:
[..]
Oke. Maar is dat Qt niet alleen gericht op mobiele apps?
Dat snap ik niet helemaal. Ik dacht dat je in C++ dan die GUI moest programmeren. Hoe zit dat dan?quote:Op maandag 6 augustus 2012 20:04 schreef t4rt4rus het volgende:
[..]
Nee
Maar dit heeft niet veel met C++ te maken.
Ja je moet het inderdaad programmeren in C++ of andere taal.quote:Op maandag 6 augustus 2012 20:05 schreef thenxero het volgende:
[..]
Dat snap ik niet helemaal. Ik dacht dat je in C++ dan die GUI moest programmeren. Hoe zit dat dan?
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |