网上商城 网站,网站备案制度,越秀区营销型网站建设,网站 图标 gifauto 关键字在 C 语言中就已经存在了#xff0c;只不过在 C 语言中它的作用是声明自动变量#xff0c;例如 auto int z 123 ; z 本来是局部变量#xff0c;加上 auto 后变成了局部的自动变量#xff0c;就是当前变量的生存周期是由编译器自动决定的#xff0c… auto 关键字在 C 语言中就已经存在了只不过在 C 语言中它的作用是声明自动变量例如 auto int z 123 ; z 本来是局部变量加上 auto 后变成了局部的自动变量就是当前变量的生存周期是由编译器自动决定的但是这和局部变量没有区别所以 auto 在 C 语言中并没有发挥什么作用。 在 C11 中就赋予了 auto 一个新的功能-自动类型推导。auto 声明的变量必须由编译器在编译时期推导而得简单来说就是由编译器来识别变量的类型。 注意使用 auto 定义变量时必须对其进行 初始化 在编译阶段编译器需要根据初始化表达式来推导 auto 的实际类型。因此 auto 并非是一种 “ 类型 ” 的声明而是一个类型声明时的 “ 占位符” 编译器在编译期会将 auto 替换为变量实际的类型。 auto a; //错误使用 auto 初始化变量必须赋值 auto 使用注意事项 1.不能作为函数参数例 void func(auto x, auto y) {}
void func(auto x, double y) {}
int main()
{func(1, 2);func(1.2, 1.2);return 0;
} 编译报错影响重载形式下的调用绑定 2.无法作为模板参数 3.无法定义数组 4.不能定义类中的非静态成员变量 5. 当在同一行声明多个变量时这些变量必须是 相同的类型 否则编译器将会报错因为编译 器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量。 void TestAuto()
{auto a 1, b 2; auto c 3, d 4.0; // 该行代码会编译失败因为 c 和 d 的初始化表达式类型同
} 6. 用 auto 声明指针类型时用 auto 和 auto* 没有任何区别 但用 auto 声明引用类型时则必须加例 int main()
{int x 10;auto a x;//与下面 auto* 声明没有区别auto* b x; //与上面 auto 声明没有区别auto c x; //auto 推导出来是一个 int 型c 并不会是 x 的引用auto c x; //正确写法return 0;
} 7.auto 会自动去除 const 属性解释如下 int main(int argc, char const *argv[])
{const int a 10;auto b a; //b 为 int不会推导为 const intauto c A; //c 推导为 char不会推导会 const charauto d a; //这个时候 d 就会带 const 属性了因为它是 a 的引用return 0;
}