C++ : auto关键字

Posted 西.北.风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ : auto关键字相关的知识,希望对你有一定的参考价值。

        前提引入:

                1.类型名,在绝大多数编程时,我们都会引入类型来定义一个我们需要的数据。

                类型众多,偶尔我们会遇见一串类型名,使用起来无比复杂。存在拼写错误,含义不明确导致出错的问题。

                列如:

std::map<std::string, std::string> m  "apple", "苹果" ,  "orange", "橙子" ,
"pear","梨" ;

std::map<std::string, std::string>::iterator it = m.begin();

           在这串代码中,std::map<std::string, std::string>::iterator 是一个类型,但是该类型太长了,特别容易写错。如何简化呢。

        在C中,typedef 作为一个可以取别名的一个关键字。确实可以省事许多,却任然存在缺陷。

typedef std::map<std::string, std::string> Map;

        若 typedef 为指针取了别名。存在小问题。

typedef char* pstring;
int main()

    const pstring p1; // 编译成功还是失败?
    const pstring* p2; // 编译成功还是失败?
    return 0;

        C++是怎么做的呢,设计师为了不想写复杂的类型,引入了auto关键字。

        auto :

       1.在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量
       2.C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得
        注:既然auto作为推导而得,在使用auto时,必须初始化。

 

 auto 的使用场景

        1. auto 在推导指针是,不必再加*号;

        2.auto在使用引用时,必须遵循规则加上&号;

        3.不能作为函数的参数使用

        4.不能直接用来声明数组。

        5.一行多个数据推导必须同类型

        

        

int main()



    //1
    int x = 10;
    auto a = &x;
    auto* b = &x;
    auto& c = x;
    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << typeid(c).name() << endl;
    *a = 20;
    *b = 30;
    c = 40;

    
    
    //5
    void TestAuto()
    
        auto a = 1, b = 2;
        auto c = 3, d = 4.0;  //错
    


return 0;

 

 

使用范围 for 循环而不使用 auto 关键字 c++

【中文标题】使用范围 for 循环而不使用 auto 关键字 c++【英文标题】:using a range for loop without using the auto keyword c++ 【发布时间】:2017-12-29 23:01:42 【问题描述】:

对于这个分配,我应该使用一个范围来打印出 ia 中的元素,而不使用 auto 关键字。基本上,这项任务是试图帮助我们理解多维数组。我知道代码中发生了什么,但我一直遇到一些错误。语法有问题,我想不通。

int ia[3][4] = 0,1,2,3,4,5,6,7,8,9,10,11;

cout << endl;
for(int &a : ia)
    for(int b : a)
        cout << b << endl;

我不断收到这些错误:

..\src\Sec_3_5_3.cpp:127:15:错误:从 'int*' 到 'int' 的无效转换 [-fpermissive] for(int &a : ia)

..\src\Sec_3_5_3.cpp:127:15: 错误:无法将右值 '(int)((int*)__for_begin)' 绑定到 'int&'

..\src\Sec_3_5_3.cpp:128:15: 错误: 'begin' 未在此范围内声明

..\src\Sec_3_5_3.cpp:128:15:错误:未在此范围内声明“结束”

【问题讨论】:

【参考方案1】:

每个ia[i] 不是int,而是一个由4 个ints 组成的数组。 为了能够保持大小,您必须使用参考:

for(int (&a)[4] : ia)
    for(int b : a)

【讨论】:

以上是关于C++ : auto关键字的主要内容,如果未能解决你的问题,请参考以下文章

喵呜:C++基础系列:auto关键字(C++11)基于范围的for循环(C++11)指针空值nullptr(C++11)

喵呜:C++基础系列:auto关键字(C++11)基于范围的for循环(C++11)指针空值nullptr(C++11)

C++开发者都应该使用的10个C++11特性

C++之auto关键字

[C/C++]C++的命名空间,缺省参数,引用,auto关键字,内联函数等

[C++] 内联函数inline 以及 auto关键字 -- C++入门