C++11 AUTO 类型实践

auto在C++11中引入,为大家带来方便。

具体使用及注意事项参考:

https://blog.csdn.net/xiaoquantouer/article/details/51647865

https://www.cnblogs.com/lenmom/p/7988635.html

用法:

一是在变量声明时根据初始化表达式自动推断该变量的类型。适用于类型冗长复杂,模板类型等

二是在声明函数时作为函数返回值的占位符

注意事项:

1.使用auto关键字的变量必须有初始值。类似引用

2.函数参数和模板参数不能被声明为auto。

3.使用auto关键字声明变量的类型,不能自动推导出顶层的CV-qualifiers和引用类型,除非显示声明

使用auto关键字进行类型推导时,如果初始化表达式是引用类型,编译器会去除引用,除非显示声明

使用auto使用auto关键字进行类型推导时,编译器会自动忽略顶层const,除非显示声明

详见例子

int main()
{
    auto fnum = 3.14;
    auto str("hello");
    cout << "fnum type:" << typeid(fnum).name() << endl;
    cout << "str type:" << typeid(str).name() << endl;

    vector<int> vec;
    auto v_it = vec.begin();
    cout << "v_it type:" << typeid(v_it).name() << endl;

    int int_ori = 5;
    int &ori_b = int_ori;
    auto a = ori_b;
    a = 10;
    cout << "int_ori: " << int_ori << " ori_b: " << ori_b << " a: " << a << endl;
    auto &b = ori_b;
    b = 20;
    cout << "int_ori: " << int_ori << " ori_b: " << ori_b << " a: " << a <<" b: " << b <<endl;

    const int cint_a = 100;
    auto a2 = cint_a;
    auto const a3 = cint_a;
    cout << "a2 type:" << typeid(a2).name() << " a3 type: " << typeid(a3).name() << endl;

    system("pause");
    return 0;
}

说明:

auto &b显示声明了引用,所以改变了原始值。但 a 并非引用只是被赋值的独立变量,因此未被b修改

最后的变量 a3是 const int 型如修改值会报错,而a2是 int 型可以修改

原文地址:https://www.cnblogs.com/chenzhefan/p/9357413.html

时间: 2024-10-01 07:17:21

C++11 AUTO 类型实践的相关文章

c++11——auto,decltype类型推导

c++11中引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能够方便的获取复杂的类型,而且还能简化书写,提高编码效率.     auto和decltype的类型推导都是编译器在编译的时候完成的,auto是通过定义auto变量时候给出的表达式的值推导出实际类型,并且在声明auto变量时必须马上初始化:decltype通过表达式的值推导出实际的类型,但是可以只声明变量,而不赋值. auto类型推导 1. auto推导 auto x = 5; //被编译器推导为int类型 au

类型别名、auto类型说明符和decltype类型说明符初探

类型别名 类型别名顾名思义是某种类型的另一个名字,常用于简化类型,易于理解和使用. 传统方法是使用关键字 typedef .新标准规定使用别名声明(alias declaration)来定义类型别名. using zhengxing = int; 如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句中往往会让人理解出错. typedef char *cstring;//cstring 是 char* 的别名 const cstring cstr = 0;//cstr 是指向 char 的

C++ auto类型说明符

本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50864612 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚知道表达式的类型.然而要做到这一点并非那么容易,有时候甚至根本做不到.为了解决这个问题,C++11标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型. 与原来那些只对应一种特定类型的说明符不同,auto让编译器通过初值来推算变量类型.显

《C++ Primer》学习 之 编译器推断auto类型

/* <C++ Primer>学习 之 编译器推断auto类型 书P61-P62 重点在于程序中的注释,方便以后复习. */ 1 #include <iostream> 2 #include <cmath> 3 #include <string> 4 using namespace std; 5 6 int main() 7 { 8 int i = 0, &r = i; 9 auto a = r; // a : int 10 11 const int

c++11 auto 与 decltype 详解

转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应某种特定的类型说明符(例如 int)不同.auto 让编译器通过初始值来进行类型推演.从而获得定义变量的类型,所以说 auto 定义的变量必须有初始值. [cpp] view plain co

auto类型说明符

编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型.然而要做到这一点并非那么容易,有时甚至根本做不到.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型.显然,auto定义的变量必须有初始值://由vall 和vall2相加的结果可以推断出item的类型auto item=vall+vall2; // it

c++11 auto 和 decltype

一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应某种特定的类型说明符(例如 int)不同.auto 让编译器通过初始值来进行类型推演.从而获得定义变量的类型,所以说 auto 定义的变量必须有初始值. 1 //由val_1 和val_2相加的结果可以推断出it

auto类型推导

引言 auto : 类型推导. 在使用c++的时候会经常使用, 就像在考虑STL时迭代器类型, 写模板的时候使用auto能少写代码, 也能帮助我们避免一些隐患的细节. auto初始化 使用auto型别推导要求必须在定义时初始化, 毕竟需要根据对象的类型推导左值对象的型别. auto j; // error. 必须初始化 auto i = 0; // i 推导型别为 int vector<int> v; auto vv = v.cbegin(); // vv 推导型别为 const int* 但

auto类型详解

下面是auto的使用举例:auto x =5; //正确,x是int类型auto pi = new auto(1); //正确,批是int*const auto* v = &x, u = 6; //正确,v是const int*类型,u是const intstatic auto y = 0.0; //正确,y是double类型auto int r; //错误,auto不再表示存储类型的指示符auto s; //错误,auto无法推导出s的类型(必须马上初始化)auto并不能代表一个实际的类型声明