Novidades do novo padrão C++
Vinícius dos Santos Oliveira
Histórico
●
2005
●
●
C++ Technical Report 1
2011
●
Final de março
–
–
●
JTC1/SC22/WG21 C++ Standards Committee decide pela
aprovação do novo padrão.
GCC 4.6 lançado
Começo de abril
–
Clang 2.9 lançado
C++0x
●
●
●
A linguagem em si foi aperfeiçoada
●
Performance
●
Usabilidade
●
Segurança
●
…
A biblioteca padrão contém mais funcionalidades para tarefas comuns
●
Threads
●
Strings
●
…
Remoção de funcionalidades obsoletas
●
export
●
Especificação de exceções
●
std::auto_ptr
Compiladores
●
●
GCC 4.6
●
http://gcc.gnu.org/projects/cxx0x.html
●
Opção -std=c++0x
LLVM/Clang 2.9
●
●
…
http://clang.llvm.org/cxx_status.html
Inicialização uniforme
Inicialização uniforme
struct Foo {
int x, y;
};
int main() {
Foo bar = {0, 0};
}
Inicialização uniforme
struct Foo {
int x, y;
Foo (int x, int y): x(x), y(y) {}
};
int main() {
Foo bar = {0, 0};
}
Inicialização uniforme
struct Foo {
int x, y;
Foo (int x, int y): x(x), y(y) {}
};
int main() {
Foo bar = {0, 0}; // ERRO DE SINTAXE
}
Inicialização uniforme
struct Foo {
int x, y;
Foo (int x, int y): x(x), y(y) {}
};
int main() {
Foo bar = {0, 0}; // VÁLIDO
}
Inicialização uniforme
struct Foo {
int x, y;
Foo (int x, int y): x(x), y(y) {}
};
int main() {
Foo bar = {0, 0}; // VÁLIDO
Foo x{0, 0};
}
Listas inicializadoras
Listas inicializadoras
●
int array[] = {0, 1, 2};
●
vector<int> v(array, array + 3);
Listas inicializadoras
●
int array[] = {0, 1, 2};
●
vector<int> v = {0, 1, 2};
Listas inicializadoras
class MyClass {
public:
MyClass(std::initializer_list<string> list);
};
int main() {
MyClass foobar = {“Hello”, “World”};
return 0;
}
auto e decltype
auto e decltype
for (vector<int>::iterator i = v.begin();i != v.end();++i) {
cout << *i << endl;
}
auto e decltype
for (vector<int>::iterator i = v.begin();i != v.end();++i) {
cout << *i << endl;
}
auto e decltype
for (auto i = v.begin();i != v.end();++i) {
cout << *i << endl;
}
auto e decltype
auto foobar = 1;
decltype(foobar) i = foobar + foobar;
decltype((foobar)) i_ref = i;
auto e decltype
auto foobar = 1;
decltype(foobar) i = foobar + foobar; // int
decltype((foobar)) i_ref = i;
// int&
foreach
foreach
for (int i: my_vector) {
cout << i << endl;
}
foreach
for (int i: my_vector) {
cout << i << endl;
}
for (int &i: my_vector) {
i = 2;
}
default e delete
default e delete
struct MyClass {
MyClass();
MyClass(const MyClass&);
MyClass & operator=(const MyClass&);
};
default e delete
struct MyClass {
MyClass(int x);
};
default e delete
struct MyClass {
MyClass(int x);
MyClass() = default;
};
default e delete
class MyClass {
private:
MyClass(const MyClass&);
MyClass & operator=(const MyClass&);
};
default e delete
struct MyClass {
MyClass(const MyClass&) = delete;
MyClass & operator=(const MyClass&) = delete;
};
default e delete
struct MyClass {
void f(double);
void double(int) = delete;
};
default e delete
struct MyClass {
void f(double);
template<typename T> void f(T) = delete;
};
Strings unicode
Strings unicode
●
char
●
●
“test”
wchat_t
●
L“test”
Strings unicode
●
char
●
●
wchat_t
●
●
L“test”
char16_t
●
●
“test” // agora UTF-8
u“test”
char32_t
●
U“test”
Strings unicode
“test \uXXXX”
Enumerações
Enumerações
enum E
{
TEST,
TEST2
};
int main()
{
enum E TEST = TEST2;
enum E foobar = TEST;
return 0;
}
Enumerações
enum class E
{
TEST,
TEST2
};
int main()
{
enum E TEST = E::TEST2;
enum E foobar = E::TEST;
return 0;
}
Enumerações
enum E: int
{
TEST
};
Outros avanços
●
●
Linguagem
●
Move constructors
●
Uso de templates com o código compilado compartilhado (extern)
●
Variadic templates
●
static_assert
●
Raw strings
●
Lambda
●
…
Biblioteca
●
Threads
●
Tipo tupla
●
Expressões regulares
●
Smart pointers
●
…
Download

Novidades do novo padrão C++ Vinícius dos Santos Oliveira