sabato 13 dicembre 2008

C++0x : il nuovo standard

Questo periodo è di grande attesa per i devoti al C++. Dopo circa dieci anni dalla prima ISO standard, C++ si appresta ad essere rivoluzionato.
L'intenzione, con il nuovo standard, è di riportare interesse sul linguaggio e migliorare le performance.
C++0x, il nuovo standard atteso per il 2009, avrà un nuovo insieme di features, le caratteristiche principali sono:
  • concetti: permette ai programmatori di specificare vincoli sui parametri dei template in modo da facilitare l'uso dei generici. Esempio di concetto:

concept LessThanComparable {
bool operator<(const T& x, const T& y); } template
requires LessThanComparable
const T& min(const T& x, const T& y) {
return x < y ? x : y; }

  • hash table: quattro nuovi containers non ordinati (std::unordered_map, std::unordered_multimap, std::unordered_set, std::unordered_mutiset )
  • puntatori intelligenti(smart pointer): automatizza l'uso di risorse con puntatori shared_ptr condivisi, superando le limitazioni del std::auto_ptr del C++98.
  • Deduzione dinamica del tipo: le nuove keyword auto e decltype permetteranno di ricavare il tipo di un espressione a run-time senza che viene dichiarata esplicitamente.
auto func(int x)->double {return pow(x);}
  • Lambda expressions e chiusure: lambda expressions è una funzione senza nome, definita dov'è chiamata.esempio:
//a lambda expression is used as an argument
myfunc([](int x, int y) -> int {return x+y;} )
  • Caratteristiche che semplificano i compiti ricorrenti.es. Un puntatore nullo letterale chiamato nullptr, enumerations fortemente tipato, delegating and inheriting constructors
  • alignof e alignas: due nuovi operatori,per avere il controllare su compilazione ed esecuzione nell'ambiente di programmazione, si può decidere l'allineamento in memoria dei dati
  • constexpr: nuova parola chiave che permette al programmatore di dichiarare che un determinato oggetto o espressione viene valutata e inizializzato a tempo di compilazione. Al contrario di const che si limita a constatare che l'oggetto in questione non cambi il suo stato dopo l'inizializzazione.
const int y=func(); //dynamic initialization
int buff[y]; //error, y isn't a compile-time constant
constexpr int f(int x){
return x * x; } //mandatory compile-time evaluation
int arr[f(3)];//OK, array's size is 9

  • nuovi algoritmi
  • Compatibile con i standard precedenti
[rif.]
The State of the Language: An Interview with Bjarne Stroustrup, devx.com

Daniele Licari

Nessun commento: