天天看點

c++11 decltype

c++11 decltype

decltype實際上有點像auto的反函數,auto可以讓你聲明一個變量,而decltype則可以從一個變量或表達式中得到類型。decltype在C++11标準制定時引入,主要是為泛型程式設計而設計,以解決泛型程式設計中,由于有些類型由模闆參數決定,而難以(甚至不可能)表示之的問題。decltype無法在派生類聲明和析構函數調用中使用。

類似于sizeof操作符,decltype也不需對其操作數求值。粗略來說,decltype(e)傳回類型前,進行了如下推導: 

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <vector>
#include <map>


void mytest()
{
    int i;
    decltype(i)j = 0;
    std::cout << typeid(j).name() << std::endl; // j ---> int

    float a;
    double b;
    decltype(a+b) c;
    std::cout << typeid(c).name() << std::endl; // c ---> double

    std::vector<int> vec;
    typedef decltype(vec.begin()) vectype;
    vectype k;
    std::cout << typeid(k).name() << std::endl;
    for (k = vec.begin(); k < vec.end(); k++)
    {
        // do some thing ...
    }

    enum // 匿名枚舉變量
    {
        OK, Error, Warning 
    } flag;
    decltype(flag) tmp = OK;
    std::cout << typeid(tmp).name() << std::endl;

    return;
}

int main()
{
    mytest();

    system("pause");
    return 0;
}      
上一篇: nginx
下一篇: C++11 thread