• c++11 decltype


    c++11 decltype

    decltype实际上有点像auto的反函数,auto可以让你声明一个变量,而decltype则可以从一个变量或表达式中得到类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。decltype无法在派生类声明和析构函数调用中使用。
    类似于sizeof操作符,decltype也不需对其操作数求值。粗略来说,decltype(e)返回类型前,进行了如下推导: 

    若表达式e指向一个局部变量、命名空间作用域变量、静态成员变量或函数参数,那么 返回类型即为该变量(或参数)的“声明类型”; 
    若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T&,其中T为e的类型;
    若e是一个x值(xvalue),则返回值为T&&; 
    若e是一个纯右值(prvalue),则返回值为T。

    #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;
    }
  • 相关阅读:
    MSSQL安全审计文件执行Rootkit-WarSQLKit
    组建自己的局域网服务器
    python openpyxl表格样式设置
    ssh 和 scp 命令访问非默认22端口。
    set | grep IFS
    Python: check if key exists in dictionary (6 Ways)
    在线Jinja2解析器
    FastApi教程|测试WebSockets
    QT Qstring的用法
    QT UI拖拽方法
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7787139.html
Copyright © 2020-2023  润新知