auto类型说明符

编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型.然而要做到这一点并非那么容易,有时甚至根本做不到.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型.显然,auto定义的变量必须有初始值:
//由vall 和vall2相加的结果可以推断出item的类型
auto item=vall+vall2; // item初始化为vall和vall2相加的结果
此处编译器将根据vall和vall2相加的结果来推断item的类型.如果vall和vall2是类Sales_item的对象,则item的类型就是double.以此类推.
使用auto也能在一条语句中声明多个变量,因为一条声明语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型都必须一样:
auto i = 0,*p=&i; //正确:i是整数,p是整形指针
auto sz=0,pi=3.14; //错误:sz和pi的类型不一致

auto一般会忽略掉顶层const,同时底层const则会保留下来,比如初始值是一个指向常量的指针
如果希望推断出的auto类型是一个顶层const,需要明确指出

原文地址:https://www.cnblogs.com/CharlesNels/p/9555558.html

时间: 2024-10-11 16:43:33

auto类型说明符的相关文章

类型别名、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++通过迭代修改字符串本身(auto类型说明符)

以字符串这种支持 for (declaration : expression) statement 这样for语句迭代的数据结构为例,我们看看auto关键字在类型推断中的作用. string s = "I LOVE YOU!"; for (char ch : s){ cout << ch << endl; } 输出: I LOVE YOU! 这种情况下用不用auto都无所谓,因为这时候auto并不能减少代码量,但是一到复杂的循环时就可以体现出来了,因此最好还是用

现代C++之理解auto类型推断

理解auto类型推断 上一篇帖子中讲述了模板类型推断,我们知道auto的实现原理是基于模板类型推断的,回顾一下模板类型推断: template <typename T> void f(ParamType param); 使用下面的函数调用: f(expr); 我们看到模板类型推断过程涉及到了模板template.函数f以及参数(包括模板参数和函数参数),调用f的时候,编译器会推断T和ParamType的类型.auto的实现和这三个部分是有着对应关系的.当使用auto声明一个变量,auto关键字

error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

1 #include<iostream> 2 using namespace std; 3 4 5 extern int i; 6 extern float f(float a); 7 float b; 8 float f(float a){ 9 return a+1.0; 10 } 11 int i; 12 int h(int x) 13 { 14 return x*i; 15 } 16 17 main() 18 { 19 b=1.0; 20 i=2; 21 f(b); 22 h(i); 2

ISO/IEC 9899:2011 条款6.7.2——类型说明符

6.7.2 类型说明符 语法 1.type-specifier: void char short int long float double signed unsigned _Bool _Complex atomic_type-specifier struct-or-union-specifier enum-specifier typedef-name 约束 2.

黑马程序员——C语言基础---进制内存分析与类型说明符

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一. 进制 1. 什么是进制 l 是一种计数的方式,数值的表示形式 汉字:十一   十进制:11  二进制:1011  八进制:13 l 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个整数,我们至少有4种表示方式 2. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 4>

《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

类模板相互引用的问题(错误:缺少类型说明符-假定为int。注意:C++不支持默认int)

问题描述: 现在有两个模板类(头文件A.h为1~14行,头文件B.h为15~27行): 1: /////////////////////////////////////////// 2: // file A.h 3: // 4: #include "B.h" 5: 6: template <class T> 7: class A 8: { 9: public: 10: T a; 11: B b_ptr; 12: A(): a(0), b_ptr(NULL) {} 13: }