目录
空指针加强
这里主要是0,NULL,nullptr之间的关系,在不同操作系统里面NULL的值是不一样的,所以,要尽量使用nullptr进行初始化。
如NULL在Windows中就是0
程序运行截图如下:
源码如下:
#include <iostream>
using namespace std;
void test(int num){
cout << "void test(int num) called!" << endl;
}
void test(void *p){
cout << "void test(void *p) called!" << endl;
}
int main()
{
void *p = NULL;
test(p);
test(NULL);
test(nullptr);
return 0;
}
auto自动类型
这里主要有以下几点:
1. auto自动类型;
2. auto与内部函数绑定机制;
3. 利用auto实现,回调函数在面向对象中的设计。
下面先来看第一点,程序运行截图如下:
这里如果用了g++等可能会出现简写,d为double,pd为double *
源码如下:
#include <iostream>
#include <typeinfo>
using namespace std;
int main(int *argc, int *argv[]){
double db = 3.14;
double *pDB = &db;
auto num = pDB;
cout << typeid(db).name() << endl;
cout << typeid(pDB).name() << endl;
cout << typeid(num).name() << endl;
getchar();
return 0;
}
下面是auto与内部函数绑定,用auto实现,回调函数在面向对象中的设计,有一个新概念:
仿函数:创建一个函数指针,引用一个结构体或者一个类的内部公共函数。
程序运行截图如下:
源码如下:
#include <iostream>
#include <functional>
using namespace std;
using namespace std::placeholders;
struct MyStruct{
void add1(int a){
cout << a << endl;
}
void add2(int a, int b){
cout << a + b << endl;
}
void add3(int a, int b, int c){
cout << a + b + c << endl;
}
};
int main(int *argc, int *argv[]){
MyStruct s;
auto func1 = bind(&MyStruct::add1, &s, _1);
auto func2 = bind(&MyStruct::add2, &s, _1, _2);
auto func3 = bind(&MyStruct::add3, &s, _1, _2, _3);
func1(100);
func2(1000, 2);
func3(10, 200, 3);
getchar();
return 0;
}