区别如下: 1、auto 是通过编译器计算变量的初始值来推断类型,decltype同样也是通过编译器来分析表达式进而得到它的类型,但是它不用将表达式的值计算出来 2、编译器推断出来的auto类型可能与初始值类型不同,众多周知,使用引用实际是使用引用的对象,特别是当引用被用作初始值时,真正参与初始化的值其实是引用对象的值,此...
auto 虽然在书写格式上比 decltype 简单,但是它的推导规则复杂,有时候会改变表达式的原始类型;而 decltype 比较纯粹,它一般会坚持保留原始表达式的任何类型,让推导的结果更加原汁原味。 从代码是否健壮的角度考虑,我推荐使用 decltype,它没有那么多是非;但是 decltype 总是显得比较麻烦,尤其是当表达式比较复杂时,例如: ...
三. decltype 和 auto 区别 decltype在处理顶层const和引用的方式与auto有些许不同,如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用在内)。 1constintci =42, &cj =ci;23decltype(ci) x =0;//x 类型为const int4auto z = ci;//z 类型为int56decltype(cj) y = x;...
auto:主要用于简化变量的声明,特别是当变量的类型比较复杂或者使用模板时。它可以提高代码的可读性和可维护性。 decltype:主要用于需要表达式类型的地方,如模板函数的返回类型、函数模板的参数类型推导等。它可以让代码更灵活,适应不同的类型。 3.表达式的处理: auto:auto关键字后面必须跟一个初始化表达式,编译器根据这...
decltype给出传递给它的表达式的declared类型。auto的作用与模板类型演绎相同。因此,例如,如果你有一个...
decltype 与 auto 不同,decltype 会完整获取其参数的类型信息,如:inti=3;constint&r=i;decltype(r...
decltype(auto) 可以推导出对象类型,也可以推导出引用类型。具体取决于 decltype 应用到 return 语句中...
decltype是C++11新增的关键字,主要用于提取变量和表达式的类型。 decltype的语法形式为:decltype(e),这里e是一个表达式,而decltype(e)是一个类型指示符。decltype的结果不是值,而是一个类型。 decltype的语法规则主要有以下四条: 如果e是一个没有用小括号括起来的标识符表达式或类成员存取表达式,那么decltype(e)的结...
第5 行代码是需要重点说明的,r1 本来是 int& 类型,但是 auto 却被推导为 int 类型,这表明当=右边的表达式是一个引用类型时,auto 会把引用抛弃,直接推导出它的原始类型。 接下来,我们再来看一下 auto 和 const 的结合: 代码语言:javascript 复制