1、nullptr(掌握)(NULL 就是0)
NULL 在源码当中就是0,因此可能会存在一些二义性的问题。
#include <iostream>`
`#include <memory>`
`using namespace std;`
`void func(int a)`
`{`
` cout << "a = " << a << endl;`
`}`
`void func(char *b)`
`{`
` cout << "b = " << b << endl;`
`}`
`int main()`
`{`
` func(NULL); // a == 0`
` return 0;`
`}`
`
在C++11 中使用nullptr代替了NULL,作为空指针的表示方式。
#include <iostream>`
`#include <memory>`
`using` `namespace std;`
`void` `func(int a)`
`{`
` cout <<` `"a = "` `<< a << endl;`
`}`
`void` `func(char` `*b)`
`{`
` cout <<` `"b = "` `<< b << endl;`
`}`
`int` `main()`
`{`
`func(nullptr);` `// b`
`return` `0;`
`}`
`
2、类型推导(auto掌握)
使用auto关键字可以推导类型。
#include <iostream>`
`#include <memory>`
`using` `namespace std;`
`double` `test()`
`{`
`return` `1.1;`
`}`
`int` `main()`
`{`
`auto i =` `10;` `// i的类型自动推导为整形(int)`
` cout << i << endl;`
`auto i2 =` `19.4;`
` cout << i2 << endl;` `// i2的类型自动推导为浮点型`
`auto i3 =` `new` `auto(10);` `// i3的类型被推导为 int *`
` cout <<` `*i3 << endl;`
`auto i4 =` `test();`
` cout << i4 << endl;`
`auto i5 =` `"hello";`
` cout << i5 << endl;`
`auto i6 =` `'a';`
` cout << i6 << endl;`
`delete i3;`
` i3 =` `nullptr;`
`return` `0;`
`}`
`
decltype 可以推导表达式的类型,需要注意的是,decltype只会分析表达式的类型,不会具体计算表达式里的值。(熟悉)
#include <iostream>`
`#include <memory>`
`using` `namespace std;`
`int` `main()`
`{`
`auto x =` `1;`
`auto y =` `2;`
`decltype(x+y+3*32+1.3) z =` `888.32;` `//int + int *int + double = double;`
` cout << z << endl;`
` cout <<` `sizeof(z)` `<< endl;`
`return` `0;`
`}`
`