欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++11Auto关键字及注意点

程序员文章站 2022-05-16 16:16:29
1.使用阿里云服务器,选择的centos版本,首先安装g++ 4.8.5 yum install gcc-c++ 2.写个小程序测试一下: #include "iostream&q...

1.使用阿里云服务器,选择的centos版本,首先安装g++ 4.8.5

yum install gcc-c++

2.写个小程序测试一下:

#include "iostream"

using namespace std;

int main()
{
    auto a = 1;
    return 0;

}

编译报错,找不到auto这种类型

3.auto的限制
* auto不能用于函数参数

void testfunc(auto iparam)
{

}
test.cpp:5:20: error: parameter declared ‘auto’ void testfunc(auto iparam)                    ^
auto不能用于非静态成员变量
struct foo
{
    auto var1_ = 0;
    static const auto var2_ = 0;
};
test.cpp:12:15: error: non-static data member declared ‘auto’  auto var1_ = 0;               ^
auto仅能用于推导static const的整型或者枚举成员。
auto无法定义数组 auto无法推导出模板参数 列表内容

4.什么时候用auto
* 优化代码美观性,减少冗余和繁琐的重复操作

int main()
{
    auto a = 1;

    std::unordered_multimap resultmap;
    //...
    std::pair::iterator,
        std::unordered_multimap::iterator> 
            range = resultmap.equal_range(key);

    return 0;

}

=>

int main()
{
    auto a = 1;

    std::unordered_multimap resultmap;
    //...
    auto range = resultmap.equal_range(key);

    return 0;

}
无法提前感知函数返回类型的时候
class foo
{
public:
    static int get(void) 
    //...
}

class bar
{
public:
    static const char* get(void)
    //...
}

template 
void func()
{
    auto val = a::get();
}