您的位置:首页 > 文旅 > 旅游 > 成都到西安高铁_h5页面制作教程_营销策划公司名字_seo排名是什么意思

成都到西安高铁_h5页面制作教程_营销策划公司名字_seo排名是什么意思

2025/3/14 10:05:07 来源:https://blog.csdn.net/2401_88249494/article/details/144147401  浏览:    关键词:成都到西安高铁_h5页面制作教程_营销策划公司名字_seo排名是什么意思
成都到西安高铁_h5页面制作教程_营销策划公司名字_seo排名是什么意思

auto:

1.定义:

在C++中, auto 是一个类型说明符,它让编译器在编译阶段自动推导变量的类型,其类型取决于初始化表达式的类型。auto 在声明变量时使用,编译器会根据变量初始化表达式自动推断类型。

#include<iostream>
#include <typeinfo>
using namespace std;
int fun()
{return 1;
}
int main()
{int a = 1;auto b = a;auto c = 'a';auto d = fun();cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;//auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化return 0;
}
//typeid 是一种在运行时获取类型信息的方式,它可以用来实现类型安全的转换和其他依赖于类型识别的功能。
//是C++中的一个内置函数,返回一个const char*类型的指针,指向该类型信息的字符串表示。
//注意要包含#include <typeinfo>

2.注意事项:

1)必须初始化

2)不能和指针结合来修改数组:

auto* a 加一个 * 是在强调变量 a 是指针,故a只能接受指针类型,并不是将变量类型改为指针类型,没有指针auto类型。

3)在同句话中,auto的类型必须相同

4)auto& b 是在强调b是引用,但引用可以除了可以接收引用,还可以接收其它类型,故b除了可以接收引用外还可以接收其它类型(int, double……),说明b是该类型变量的引用。

decltype:

1.定义:

decltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用。

2.形式

int x = 0;
decltype(x) y = 1;           // y -> int
decltype(x + y) z = 0;       // z -> int
const int& i = x;
decltype(i) j = y;           // j -> const int &
const decltype(z) * p = &z;  // *p  -> const int, p  -> const int *
decltype(z) * pi = &z;       // *pi -> int      , pi -> int *
decltype(pi)* pp = &pi;      // *pp -> int *    , pp -> int * *

3.与auto区别:

1)auto根据=右边的初始值推导出变量的类型,decltype根据exp表达式推导出变量的类型,跟=右边的value没有关系

2)auto要求变量必须初始化,这是因为auto根据变量的初始值来推导变量类型的,如果不初始化,变量的类型也就无法推导而decltype不要求

auto p=value;
decltype(exp) p=value;

decltype也可以写为:

decltype(exp) p;

原则上将,exp只是一个普通的表达式,它可以是任意复杂的形式,但必须保证exp的结果是有类型的,不能是void;如exp为一个返回值为void的函数时,exp的结果也是void类型,此时会导致编译错误

4.应用:

类的静态成员可以使用auto, 对于类的非静态成员无法使用auto,如果想推导类的非静态成员的类型,只能使用decltype。

template<typename T>
class A
{
private :decltype(T.begin()) m;//typename T::iterator m;   //这种用法会出错
public:
void func(T& hhh)
{m=hhh.begin();
}
};int main()
{const vector<int> vec;
A<const vector<int>> obj;
obj.func(vec);
return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com