Con l'introduzione del nuovo standard il C++ è diventanto effettivamente un nuovo linguaggio di programmazione. Sono stati introdotti molti nuovi concetti come: std::move (Rvalue), Lambda, auto keyword, Uniform initialization, Future (e async call), Callable entities e molte altre ancora precedentemente introdotte nelle boost e adesso inglobate nello standard e nello standard library. Vi presento un piccolo esempio di codice che ho compilato con il gcc 4.7.1. Lo scopo è quello di mostrare l'uso dei nuovi costrutti del C++11
// includiamo gli header nececessari
#include
#include
#include
using namespace std;
// definiamo una semplice struttura che conterrà due valori interi
struct Point {
int x, y;
};
// Definiamo una funzione f che utilizza dei vector come container.
// Adesso i vector sono automaticamente "movable"
std::vector f(int n)
{
std::vector r;
for (int i = 0; i < n; i++)
r.push_back(Point{i, i*i});
return r;
}
int main()
{
//definiamo una lambda function usando "auto" come tipo (lasciamo al compilatore il compito di derivare il tipo)
auto s = [](const std::vector& v){
unsigned long int rx = 0, ry = 0;
// scorriamo il vector con la nuova sintassi: for(auto v : c)
for (auto i : v)
{
rx += i.x;
ry += i.y;
}
// la nostra funzione restituisce una tupla
return std::make_tuple(rx, ry);
};
// adesso invochiamo s (f (10000000))
auto r = s(f(10000000));
cout << "somma: " << std::get(r) << ", " << std::get(r) << endl;
return 0;
}
Per maggiori informazioni si può consulare "Overview of The New C++ (C++11)" di Scott Meyers (http://www.aristeia.com/C++11.html)

