Professional Documents
Culture Documents
06 CPP11
06 CPP11
06 CPP11
C++11
A C++11
• A C++ nyelv szabványa 2011-ben jelent meg
// Egyszerű bejárás
for(auto it : matrix) { //A matrix elemeinek a másolatával dolgozik
for(auto jt : it) {
cout << jt << ” ”;
}
cout << endl;
}
Range-based loops
vector<vector<int>> matrix; //C++11-ben nem kell szóköz a >> közé
// Feltöltés
for(auto & it : matrix) { //Referenciaként kell átvenni módosításhoz
for(auto & jt : it) {
jt = 1;
}
}
Iterátortípusok
• const_iterator esetén használjunk begin() és end() helyett
cbegin() és cend() függvényeket
foo(NULL);
nullptr
• C++11-ben bevezették a nullptr kulcsszót
• #include <type_traits>
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n';
std::cout << std::is_pointer<A *>::value << '\n';
std::cout << std::is_pointer<A &>::value << '\n';
std::cout << std::is_pointer<int>::value << '\n';
std::cout << std::is_pointer<int *>::value << '\n';
std::cout << std::is_pointer<int **>::value << '\n';
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n';
std::cout << std::is_pointer<A &>::value << '\n';
std::cout << std::is_pointer<int>::value << '\n';
std::cout << std::is_pointer<int *>::value << '\n';
std::cout << std::is_pointer<int **>::value << '\n';
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n';
std::cout << std::is_pointer<int>::value << '\n';
std::cout << std::is_pointer<int *>::value << '\n';
std::cout << std::is_pointer<int **>::value << '\n';
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n'; //false
std::cout << std::is_pointer<int>::value << '\n';
std::cout << std::is_pointer<int *>::value << '\n';
std::cout << std::is_pointer<int **>::value << '\n';
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n'; //false
std::cout << std::is_pointer<int>::value << '\n'; //false
std::cout << std::is_pointer<int *>::value << '\n';
std::cout << std::is_pointer<int **>::value << '\n';
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n'; //false
std::cout << std::is_pointer<int>::value << '\n'; //false
std::cout << std::is_pointer<int *>::value << '\n'; //true
std::cout << std::is_pointer<int **>::value << '\n';
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n'; //false
std::cout << std::is_pointer<int>::value << '\n'; //false
std::cout << std::is_pointer<int *>::value << '\n'; //true
std::cout << std::is_pointer<int **>::value << '\n'; //true
std::cout << std::is_pointer<int[10]>::value << '\n';
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n'; //false
std::cout << std::is_pointer<int>::value << '\n'; //false
std::cout << std::is_pointer<int *>::value << '\n'; //true
std::cout << std::is_pointer<int **>::value << '\n'; //true
std::cout << std::is_pointer<int[10]>::value << '\n'; //false
std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
template< class T > struct is_pointer
#include <iostream>
#include <type_traits>
class A {};
int main() {
std::cout << std::boolalpha; //0 és 1 helyett true és false
std::cout << std::is_pointer<A>::value << '\n'; //false
std::cout << std::is_pointer<A *>::value << '\n'; //true
std::cout << std::is_pointer<A &>::value << '\n'; //false
std::cout << std::is_pointer<int>::value << '\n'; //false
std::cout << std::is_pointer<int *>::value << '\n'; //true
std::cout << std::is_pointer<int **>::value << '\n'; //true
std::cout << std::is_pointer<int[10]>::value << '\n'; //false
std::cout << std::is_pointer<std::nullptr_t>::value << '\n'; //false
}
Osztályon belüli változások
• Adattagnak értéket adhatunk deklarációnál is
class foo {
private:
int a = 125;
float c = 65.4;
};
class Foo{
Foo(const Foo& other) = delete;
Foo& operator=(const Foo& other) = delete;
void bar() = delete;
void bar(int);
};
class Foo {
vector<int> bar;
int a;
float b; Foo foo(5, 3.14f, {1, 2, 3, 4, 5});
public: foo.print();
Foo(int a, float b, initializer_list<int> l)
{
this->a = a;
this->b = b;
bar = l; for (int i : {1, 2, 3, 4, 5})
} {
void print() const { cout << i << endl;
cout << "a: " << a << endl; }
cout << "b: " << b << endl;
for( auto it : bar)
cout << it << " ";
cout << endl;
}
};
initializer_list<int> getPos() {
return {3, 16, 25, 5, 8};
}