JoeChenzzz

导航

auto和decltype(c++11)

1.auto

1)auto是一个类型说明符(类型说明符就是像int、double这样的),用来定义一个变量,它可以让编译器去分析表达式的类型,并使用该表达式的值去初始化变量  

//auto定义的变量必须有初始值
int v1 = 1, v2 = 2;
auto item = v1 + v2;//编译器根据v1和v2相加的结果推断item的类型,并完成对item的初始化

2.dectype

1)dectype也是一个类型说明符,但它只让编译器去分析表达式的类型,并不用该表达式的值去初始化变量

int cj = 0;
decltype(cj) x = 1;
decltype(cj) y;

2)当decltype的右边是一个计算表达式,如果它的结果是左值,则将得到的是一个引用,如:解引用符*、函数调用运算符()

int i = 0;
int* p = &i;
decltype(*p) c;//错误!!!解引用符返回左值,所以c是int&,必须初始化
decltype((i)) d;//错误!!!函数调用运算符返回左值,所以d是int&,必须初始化

3)decltype还可以作用于某个函数时,返回的是函数类型

int add(int a, int b)
{
    return a + b;
}

int jian(int a, int b)
{
    return a - b;
}

int main()
{
    function<decltype(add)> f1=jian;
    cout << f1(10,3) << endl;        //输出:7

    return 0;
}

 

posted on 2018-11-04 15:56  JoeChenzzz  阅读(191)  评论(0编辑  收藏  举报