首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++11 auto 关键字及 decltype 关键字

C++11引入auto主要有两种用途:自动类型推导和返回值占位。auto在C++98标识临时变量语义,由于使用极少且多余,在C++11已被删除。前后两个标准auto,完全是两个概念。...新 auto 关键字在声明一些迭代器、类模板等变量时候,使用非常方便,具体可以看以下代码,有详细注释。...auto推倒不出到底是什么类型 auto k = 5; auto\* pk = new auto(5); // auto 关键字声明变量必须初始化,在一行时必须使用相同数据类型初始化...= 0; auto constb = consta; return 0; } 使用 auto 关键字有以下几点注意事项: 1、可以使用valatile,pointer(*),reference...() << endl; // This will print int [9] 【decltype 关键字】 可以根据一个表达式或者根据一个变量推出类型。

22110
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】C++11新特性 --- 列表初始化,auto关键字,decltype关键字

相比于C++98/03,C++11则带来了数量可观变化,其中包含了约140个新特性,以及对C++03标准约600个缺陷修正,这使得C++11更像是从C++98/03孕育出一种新语言。...接下来我将通过几篇文章来介绍一下C++11重要特性! 2 列表初始化 在C++11加入了initializer_list标准库类型,用于表示某种特定类型数组。...3 声明 3.1 auto关键字 在C++98auto是一个存储类型说明符,表明变量是局部自动存储类型,但是局部域中定义局部变量默认就是自动存储类型,所以auto就没什么价值了。...C++11废弃auto原来用法,将其用于实现自动类型推断。这样要求必须进行显示初始化,让编译器将定义对象类型设置为初始化值类型。...所以出于清晰和安全角度考虑,C++11新增了nullptr,用于表示空指针 3.4 总结 这两个关键字在使用很有可能会变成祸根!

7710

C++auto关键字用法

autoC++11 引入关键字,用于让编译器自动推导变量类型。它可以用于声明变量、函数返回类型、以及范围迭代器等地方。 以下是 auto 关键字主要用法: 1....= numbers.end(); ++it) { std::cout << *it << " "; } // C++11 范围迭代器 for (auto num...注意事项: auto 并不是一种动态类型,而是在编译时确定。变量类型在初始化时就已经确定。 在函数参数、非静态成员变量、数组等地方不能使用 auto。...在需要明确指定类型情况下,尤其是在函数接口和公共代码,最好使用显式类型声明。 使用 auto 主要优势在于简化代码,尤其是在处理复杂类型、迭代器、以及模板。...它有助于提高代码可读性和可维护性。 总结: auto 是 C++ 一个强大工具,它能够减少代码模板和复杂类型书写,提高代码可读性。

41210

CCPPauto关键字对比分析

引入 auto是C语言一个关键字关键字主要用于声明变量生存期为自动,即将不在任何类、结构、枚举、联合和函数定义变量视为全局变量,而在函数定义变量视为局部变量。...C语言中auto关键字 C语言和C++auto关键字使用有很大区别。...C++auto关键字 ​ C++auto关键字是一个类型说明符,通过变量初始值或者表达式参与运算数据类型来推断变量类型。...编程时通常需要把表达式值式赋给变量,这就要求在声明变量时清楚知道表达式类型,C++11新标准引入了auto 类型说明符,让编译器去分析表达式类型。...= 0, pi = 3, 14; //错误:sz和pi类型不一致 auto和decltype 作用有点相似,都可以推断某个表达式具体类型,当我们希望从表达式值推断出要定义变量类型

83220

C++auto关键字用法详解

C++11,标准委员会赋予了auto全新含义即:auto不再是一个存储类型指示符,而是作为一 个新类型指示符来指示编译器,auto声明变量必须由编译器在编译时期推导而得。.... auto不能推导场景 auto不能作为函数参数 因为编译器无法对a实际类型进行推导 auto不能直接用来声明数组 为了避免与C++98auto发生混淆,C++11只保留了auto作为类型指示符用法...return 0; } 所以auto无疑是十分不错选择 5、auto在C++14和C++17更新 C++auto关键字最初在C++11引入,主要用于自动类型推导,使编程更简洁。...这意味着你可以在函数定义时使用auto关键字指定返回类型,编译器会根据返回语句推导出具体类型。这样做可以增加代码可读性和灵活性,特别是在模板编程和使用lambda表达式时。...但在C++14增强了Lambda能力,允许使用auto关键字作为参数类型,从而创建泛型Lambda。

24310

【C++修行之道】引用、内联函数、auto关键字、for循环(C++)、nullptr(C++11

如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数 调用。...短小函数定义 换用内联函数 三、auto关键字(C++11) 3.1 类型别名思考 随着程序越来越复杂,程序中用到类型也越来越复杂,经常体现在: 类型难于拼写 含义不明确导致容易出错 #include...C++11,标准委员会赋予了auto全新含义即:auto不再是一个存储类型指示符,而是作为一 个新类型指示符来指示编译器,auto声明变量必须由编译器在编译时期推导而得。...为了避免与C++98auto发生混淆,C++11只保留了auto作为类型指示符用法 4. auto在实际中最常见优势用法就是跟以后会讲到C++11提供新式for循环,还有 lambda表达式等进行配合使用...注意: 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入

3300

C++ auto 关键字使用

a =10 ; //拥有自动生命期auto int b = 20 ;//拥有自动生命期static int c = 30 ;//延长了生命期C++98auto多余且极少使用,C++11已经删除了这一用法...C++11 autoauto可以在声明变量时候根据变量初始值类型自动为此变量选择匹配类型,类似的关键字还有decltype。...程序运行结果输出了 int 这种用法就类似于C#var关键字auto自动类型推断发生在编译期,所以使用auto并不会造成程序运行时效率降低。...例如:auto a4 = 10, a5 = 20, a6 = 30;//正确auto b4 = 10, b5 = 20.0, b6 = 'a';//错误,没有推导为同一类型使用auto关键字做类型自动推导时...func(auto a) //错误{//... }时刻要注意auto并不是一个真正类型。

4.1K31

C++11特性篇】盘点C++11三种简化声明方式【auto】【decltype】【nullptr】(3)

一.auto&范围for 在C++98auto是一个存储类型 说明符,表明变量是局部自动存储类型 ,但是局部域中定义局部变量默认就是自动存储类型,所以auto就没什么价值了。...C++11废弃auto原来用法,将其用于实现自动类型推断。这样要求必须进行显示初始化 ,让编译器将定义对象类型设置为初始化值类型。...< endl; } 【2】decltype——推出对象类型后:(1)再定义变量(2)或者作为模板实参 关键字decltype将变量类型声明为表达式指定类型 有以下两种主要用法: 单纯先定义一个变量出现...作为模板实参 int main() { auto pf = malloc; auto pf1 = pf; // decltype推出对象类型,再定义变量,或者作为模板实参...,C++11新增了nullptr,用于表示空指针

11110

C++11——引入关键字

1.auto auto是旧关键字,在C++11之前,auto用来声明自动变量,表明变量存储在栈,很少使用。在C++11被赋予了新含义和作用,用于类型推断。...这种情况下,auto并不是告诉编译器去推断返回类型,而是指引编译器去函数末端寻找返回值类型。在下面这个例子,函数返回值类型是operator+操作符作用在T、U类型变量上返回值类型。...与auto关键字一样,用于进行编译时类型推导,不过它与auto还是有一些区别的。...在实际开发,建议大家重写继承而来虚函数时,加上关键字virtual表明当前函数式虚函数,C++编译”放纵“降低了代码可读性。...+11新特性】auto关键字 [2]C++11特性:decltype关键字 [3]C++开发者都应该使用10个C++11特性 [4]constexpr与常量表达式(c++11标准) [

1.4K50

C++拾趣——C++11语法糖auto

这样推导编译器也完全可以完成。但是在C++11之前标准,我们也只能这种笨拙方式去声明。...于是在C++11标准引入了auto关键字,它让上述类型推导通过统一标准表达出来。我们可以使用auto去声明一个变量,但是这并不意味着C++增加了一个auto类型——一个可以表示任意类型类型。...因为强类型特性是不会变,变只是编译器,它变更加高级——推导出确定类型。这儿特别需要指出是:auto关键字并不是在预编译过程中被替换成确定类型。...在C++11标准推出之前,我们可以使用别名来减少负担。...综上所述,除了在模板必要地方使用auto外,其他地方都需要可以从右值一眼看出类型,否则就会产生理解上歧义或者困扰。

1.1K20

【C++入门】内联函数、auto与基于范围for循环

2.auto关键字(C++11) 2.1auto介绍 auto是一个C++11引入关键字,用于自动推导变量类型。通过使用auto关键字编译器可以根据变量初始化表达式自动推断出其类型。...因此auto并非是一种“类型”声明,而是一个类型声明时“占位符”,编译器在编译期会将auto替换为变量实际类型。 需要注意是,auto关键字编译时进行类型推导,而不是运行时。...2.3 auto不能推导场景 auto不能作为函数参数: // 此处代码编译失败,auto不能作为形参类型 //因为编译器无法对a实际类型进行推导 void TestAuto(auto a)//错误...C++98auto发生混淆,C++11只保留了auto作为类型指示符用法; auto在实际中最常见优势用法就是跟下面讲到C++11提供新式for循环,还有lambda表达式等进行配合使用。...所以在C++11引入了nullptr关键字来代表一个空指针,用于表示指针不指向任何内存地址; 注意: 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入

11910

【C++初阶】--- C++入门(下)

目录 一、内联函数inline 1.1 概念 1.2 特性 二、 auto关键字(C++11) 2.1 auto简介 2.2 auto使用细则 三、基于范围for循环(C++11) 3.1 概念...于是乎在C++引出了内联函数概念。 如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数调用。...C++11,标准委员会赋予了auto全新含义即:auto不再是一个存储类型指示符,而是作为一个新类型指示符来指示编译器,auto声明变量必须由编译器在编译时期推导而得。...不能直接用来声明数组 int arr1[] = {1, 2, 3}; auto arr2[] = { 4, 5, 6}; //错误 为了避免与C++98auto发生混淆,C++11只保留了auto作为类型指示符用法...注意: 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入

9110

万字长文带你掌握C++11auto和decltype用法和区别

C++11 为了顺应这种趋势也开始支持自动类型推导了!C++11 使用 auto 关键字来支持自动类型推导。...C++11 赋予 auto 关键字含义,使用它来做自动类型推导。也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量类型,这样我们就不用手动指明变量数据类型了。...在本例编译器根据第一个子表达式已经推导出 auto 为 int 类型,那么后面的 m 也只能是 int 类型,如果写作m=12.5就是错误,因为 12.5 是double 类型,这和 int 是冲突...因为 auto 并不适用于所有的自动类型推导场景,在某些特殊情况下 auto 用起来非常不方便,甚至压根无法使用,所以 decltype 关键字也被引入到 C++11 。...m_it 成员定义,很难看出会有什么错误,但在使用 Base 类时候,如果传入一个 const 类型容器,编译器马上就会弹出一大堆错误信息。

41510

C++11关键字

1.auto auto是旧关键字,在C++11之前,auto用来声明自动变量,表明变量存储在栈,很少使用。在C++11被赋予了新含义和作用,用于类型推断。...C++11将这些类型推导手段进行了细致考量,最终标准化为auto与decltype。decltype与auto关键字类似,用于编译时类型推导,不过它与auto还是有一些区别的。...还是说,他只是不小心写了个与父类同名函数,却在不经意间导致了隐藏?为了避免这种错误C++11引入了override关键字。...在实际开发,建议大家重写继承而来虚函数时,加上关键字virtual表明当前函数是虚函数,C++编译“放纵”降低了代码可读性。...---- 参考文献 [1]【C++11新特性】auto关键字 [2]C++11特性:decltype关键字 [3]C++开发者都应该使用10个C++11特性 [4]constexpr与常量表达式

3K10

C++心决之内联函数+auto关键字+指针空值

短小函数定义 换用内联函数 8. auto关键字(C++11) 8.1 类型别名思考 随着程序越来越复杂,程序中用到类型也越来越复杂,经常体现在: 1. 类型难于拼写 2....C++11 ,标准委员会赋予了 auto 全新含义即: auto 不再是一个存储类型指示符,而是作为一 个新类型指示符来指示编译器, auto 声明变量必须由编译器在编译时期推导而得 。...为了避免与 C++98 auto 发生混淆, C++11 只保留了 auto 作为类型指示符用法 4. auto 在实际中最常见优势用法就是跟以后会讲到 C++11 提供新式 for...指针空值nullptr(C++11) 10.1 C++98指针空值 在良好 C/C++ 编程习惯,声明一个变量时最好给该变量一个合适初始值,否则可能会出现 不可预料错误,比如未初始化指针...在使用 nullptr 表示指针空值时,不需要包含头文件,因为 nullptr 是 C++11 作为新关键字引入 。 2.

10310

每个C++开发者都应该学习和使用C++11特性

本节目录 unsetunset1、autounsetunset 在C++auto是一个关键字,用于进行类型推导。它引入是为了简化代码并提高可读性。...使用auto关键字声明变量时,编译器会根据变量初始值自动推导出其类型。 下面是auto一些重要特点和用法: 类型推导: 使用auto关键字可以根据变量初始值推导出变量类型。...1. override 关键字 override 关键字用于显式地标记派生类成员函数,以指明该函数是对基类虚函数重写。...}; 在派生类中使用 override 关键字,如果没有正确地重写基类虚函数,编译器会产生错误。...{}; // 错误:不能继承 final 类 使用 final 关键字可以明确地告诉编译器某个类或者某个虚函数不允许再次派生或者重写,从而帮助提高代码安全性和稳定性。

5610
领券