Ik wil nog even terugkomen op onze discussie over assignment/initalisatie terminologie. Het is voor de topic starter niet meer echt van belang (is de hele discussie eigenlijk nooit geweest), maar ik heb de even moeite gedaan om de preciese details uit m'n geheugen op te vissen (waarbij ik overigens gebruik heb gemaakt van het boek waar ze oorspronkelijk uit kwamen). Voor wie het nog interesseert:
Zoals mbravenboer al opmerkte draait het bij zowel een assignment als een initialisatie om het binden van een waarde aan een variable. Sterker nog assignment en initialisatie zijn exact hetzelfde behoudens het moment waarop deze binding plaatsvindt. De binding bij initialisatie vindt plaats op het moment dat de variable aan het geheugen wordt gebonden (het moment waarop de variable wordt gecreerd). De binding is daardoor statisch of dynamisch, afhankelijk van of de binding van de variable aan het geheugen statisch of dynamisch is. Een assignment daarentegen is altijd runtime, en de binding die erbij tot stand wordt gebracht is dus altijd dynamisch.
Of een variable al dan niet een named constant (dus niet constante, een constante is b.v. 7) is, wordt in principe niet bepaald door of deze wordt geïnitialiseerd, of geassigned. De binding van een waarde aan een named constant kan namelijk ook zowel statisch als dynamisch zijn (namelijk dynamisch als de toegekende waarde niet compile time bekend is; er zijn talen die dit niet toelaten). Het enige verschil met gewone variablen is dat de binding met een waarde die gemaakt wordt
permanent is. Deze definitie van named constant sluit in principe een constructie als deze niet uit:
Dit zou gewoon een dynamisch binding van 10 aan i opleveren die niet meer mag veranderen, op zich niets bijzonders. Een reden die ik kan bedenken waarom dit niet wordt gedaan, is dat dat het niks toevoegd naast de gebruikelijke manier om named constants te initialiseren terwijl het moeilijker (onmogelijk?) wordt voor de compiler om compile time te bepalen of het const zijn van een variable niet wordt overschreden. De link tussen initialisatie als toekennings methode en het constant zijn van een variable is dus vrij kunstmatig.
Tot zover de mierenneuk oefening.
Een openbaring die ik onderging tijdens het lezen wil ik jullie niet onthouden:
Ik wist niet dat C++ de volgende constructie kende:
code:
1
2
3
4
5
| condition?a:b = c;
wat equivalent is met:
if (condition) then a=c else b=c; |
Da's natuurlijk prachtig voor de orthogonaliteit van de taal, om dat toe te staan naast de
constructie. Jammer alleen dat ze hiervoor überhaupt nieuwe constructies hebben geïntroduceerd, echt mooi orthogonaal zou het zijn geweest als ze dit hadden toegestaan:
code:
1
2
3
4
5
| (if (condition) then a else b) = c
en
a = if (condition) then b else c |
[over promoveren]
Ik neem aan dat je zelf ook liever onderzoek wilt doen naar iets wat interesanter is dan dit
Ik heb trouwens het idee dat jij momenteel niet meer studeert (en ik neem ook aan dat je een universitaire informatica opleiding hebt afgerond) en dus al een tijdje aan het werk bent. Het zou van bijzonder veel motivatie getuigen als jij daadwerkelijk je huidige salaris opgeeft om voor een AIO salaris bij een of andere uni te gaan promoveren. Kijk, ik ga ook promoveren, maar ik ben nog nooit een fatsoenlijk salaris verdient, dus alles wat ik straks ga krijgen is beter dan nu. Daarnaast bestaat er nog de mogelijkheid dat ik als werknemer bij Philips in dienst treed en dan om mijn werkzaamheden daar promoveer. Dat zou een typisch geval zijn van: "Have my cake and eat it too!"
[/over promoveren]
He who knows only his own side of the case knows little of that.