6. Syntaxe pratique #3 : foreach
6
vector<int> nombres;
for(int i = 0 ; i < nombres.size() ; i++)
{
vector<int> nombres;
for(int &element : nombres)
{
cout << element << endl;
}
int & element = nombres[i] ;
cout << element << endl;
}
C++03
C++11
7. Plus clair et plus sûr #1 : héritage virtuel
7
class A
{
virtual void f() const;
};
class B : public A
{
void f(); // intentionally not overriding?
};
C++03
8. Plus clair et plus sûr #1 : héritage virtuel
8
class A
{
virtual void f() const;
};
class B : public A
{
virtual void f() override; // error, f does not override
};
C++11
9. Plus clair et plus sûr #1 : héritage virtuel
9
class A
{
virtual void f() final;
};
class B : public A
{
virtual void f(); // error, f is final
};
C++11
10. Plus clair et plus sûr #2 : enums
10
enum Selection
{
None,
Single,
Multiple
};
enum Border
{
None,
Flat,
Raised
};
Selection sel = None; // name clash
C++03
11. Plus clair et plus sûr #2 : enums
11
enum class Selection
{
None,
Single,
Multiple
};
enum class Border
{
None,
Flat,
Raised
};
Selection sel = Selection::None;
C++11
12. Plus clair et plus sûr #3 : nullptr
12
int* p1 = NULL; // macro
int* p2(0);
void f(int n);
void f (char *s);
f( NULL ); // which function is called?
int* p2 = nullptr;
int i = nullptr; // error
C++03
C++11
15. Nouvelle fonctionnalité #2 : move and rvalues
15
template <class T> swap(T& a, T& b)
{
template <class T> swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}
T tmp(a);
a = b;
b = tmp;
}
C++03
C++11