Se ne dicono tante di MS, ma VisualC++ spacca, c'e' poco da fare
Bah; se parliamo di Visual Studio (IDE & such) allora posso concordare, ma parlando del compilatore C++ Microsoft non posso che dare un giudizio negativo (sopratutto quando parliamo di aderenza allo standard).
Però ho letto cose molto positive su quest'ultima versione, ad esempio hanno rimosso quell'orrenda cosa che era il Managed C++ e hanno usato in maniera massiccia molte cose del C++11.
Comunque guardati anche C#, che è un linguaggio molto più moderno e ben progettato di C++. Su quel fronte MS ha fatto un ottimo lavoro.
Un interessante articolo che analizza l'implementazione dello Switch Statement sul compilatore Visual C++.In poche parole utilizza un sistema di tabelle per garantire salti con complessità O(1) nel caso in cui le label siano consecutive, O(log N) negli altri casi, usando un binary search tree a compile time. Nei casi banali lo switch viene automaticamente convertito in un if-else, per mantenere comunque il minor tempo di esecuzione possibile.http://www.codeproject.com/Articles/100473/Something-You-May-Not-Know-About-the-Switch-Statem
Boh, vedremo come si evolve la situazione.Per il momento mi tengo stretto il mio bel elefante.
Quello che mi "preoccupa", in senso lato, è che il nuovo C++ è così diverso dal vecchio C++ '98 da risultare quasi un nuovo linguaggio a sè stante. Questo significa che i vecchi programmatori tenderanno per inerzia a non usare le novità e i nuovi programmatori non saranno attratti da questo mondo, continuando a preferire linguaggi diversi e più semplici (Java e C# attualmente sono i più diffusi in ambito enterprise).
class Point { Point(int x, int y) ....};....Color getPointColor(Point p);....Color c = getPointColor({4, 6});
Le considerazioni fatte per lo switch statement non sono una prerogativa del compilatore Microsoft, ma di qualsiasi optimizing compiler.Ci sarebbero tante cose da dire sullo switch statement del C (diverso dal case statement del Pascal) che rende difficoltosa la generazione della jump table. Alcune considerazioni fatte nell'articolo non valgono. Purtroppo non ho più tempo per dilungarmi nei forum :-(
Citazione da: TheKaneB - 23 Aprile 2014, 09:22:41Nei casi banali lo switch viene automaticamente convertito in un if-else, per mantenere comunque il minor tempo di esecuzione possibile.I casi banali sono per n molti piccoli (n << 5), diversamente la jump table ha prestazioni migliori.
Nei casi banali lo switch viene automaticamente convertito in un if-else, per mantenere comunque il minor tempo di esecuzione possibile.
Io lo considero un altro linguaggio, perché cambi il modo di programmare con C++0x11.
Posso catalogarlo come il peggior libro che ho letto sul language design e software engineering,
Citazione da: Z80Fan - 24 Aprile 2014, 16:53:54Secondo me, non è poi "così diverso"Il C++ per come venne concepito da Stroustrup non ha nulla a che vedere con il C++ di oggi.
Secondo me, non è poi "così diverso"
Oggi non si può dire ciò sui compilatori C++ e credo che per i suoi progetti oggi nemmeno lo utilizzi. Lo stesso Stroustrup fa capire in alcune parti che da quando si è messo in mezzo il working group del C++ standard committee, il suo linguaggio ha perso di semplicità. Addirittura ha scritto che alcune delle feature aggiunte successivamente sono pure troppo per lui.
Aggiungo come mio solito fare un quote sul C++:CitazioneIf you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor and when was the last time you needed one?— Tom Cargill
If you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor and when was the last time you needed one?— Tom Cargill
Come chicca finale, imparate a memoria ciò:Citazione The body of a destructor is executed before the destructors for member objects. Destructors for nonstatic member objects are executed before the destructors for base classes. Destructors for nonvirtual base classes are executed before destructors for virtual base classes. Destructors for nonvirtual base classes are executed in reverse order of their declaration in the derived class. Destructors for virtual base classes are executed in the reverse order of their appearance in a depth-first left-to-right traversal of the directed acyclic graph of base classes; “left-to-right” is the order of appearance of the base class names in the declaration of the derived class.– Bjarne Stroustrup, The C++ reference manual, section 12.4.
The body of a destructor is executed before the destructors for member objects. Destructors for nonstatic member objects are executed before the destructors for base classes. Destructors for nonvirtual base classes are executed before destructors for virtual base classes. Destructors for nonvirtual base classes are executed in reverse order of their declaration in the derived class. Destructors for virtual base classes are executed in the reverse order of their appearance in a depth-first left-to-right traversal of the directed acyclic graph of base classes; “left-to-right” is the order of appearance of the base class names in the declaration of the derived class.– Bjarne Stroustrup, The C++ reference manual, section 12.4.