| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++】04-C++新标准C++11&14-笔记(侯捷系列) -> 正文阅读 |
|
[C++知识库]【C++】04-C++新标准C++11&14-笔记(侯捷系列) |
1、全文检索工具:Windows Grep。 2、确认自己编译器支持C++11。 std::cout << _cplusplus; #if _cplusplus >= 201103L 3、使用数量不定的模板参数时,要注意递归的边界。 template<typename T, typename... Types> 可变参数模板也可以用于递归继承,tuple就是这样实现的。 4、nullptr的类型是std::nullptr_t。 5、大括号的初始化。编译器看到{t1,t2,...,tn}便做出一个initializer_list<T>,它关联至一个array<T,n>。调用函数(例如构造函数)时,该array内的元素可被编译器分解逐一传给函数,但若函数参数是个initializer_list<T>,调用者却不能给予数个T参数然后以为它们会被自动转为一个initializer_list<T>传入。 vector有一个构造函数是接受initializer_list<T>的。其实所有容器都有这种构造函数。.\include\c++\bits\stl_vector.h有如下一段代码: 6、设置默认的初值: int x1 = 1.2;?? ?// ok 7、initializer_list的拷贝是浅拷贝,它的构造函数只是传了一个array的头部指针和一个array的长度。 8、explicit用在一个以上实参的构造函数,避免隐式转换。 9、range-based for statement 11、如果你自己定义了一个ctor,那么编译器就不会再给你一个default ctor。如果你强制加上=default,就可以重新获得并使用default ctor。 构造函数可以有多个,但是拷贝构造函数只能有一个版本。拷贝赋值函数也是只能有一个版本。 一般的成员函数可以修饰为=delete,但是不可以修饰为=default。
Vec<int> v; #define是无法达到上面的效果的。 typedef也无法达到上面的效果,因为typedef是不接受参数的。 不能对别名模板进行特化。 别名模板不能在函数体内部声明。 13、别名类型,类似于typedef。 14、可以在类的成员中进行using声明。例如,
17、override保证复写的函数与父类被复写的虚函数的函数签名一致。 18、final用在类不想被继承的时候,或者虚函数不想被子类复写的时候。 19、decltype关键字。 在C++11之前是:
其实含义上就是 21、面对lambda,我们手上往往只有object,没有type。 22、lambda表达式。lambda表达式其实是一个inline函数。 但我们一般这样用: 如果没有mutable就不能++id。 类似于以下函数对象: lambda的内部实现有点像函数对象,但是它是没有默认构造函数和赋值运算符的。
递归调用处理的都是参数,使用函数模板。 24、printf可以用可变参数模板模拟实现。 void printf(cosnt char* s) 25、利用可变参数模板实现 cout << maximum(5,2,0,1,3,1,4); 的功能。其实也可以用 cout << std::max( {5,2,0,1,3,1,4} ); template<typename... Args> 26、public继承是is a的关系。private继承不是,例如tuple的实现。 27、左值可以出现于operator=左侧。右值只能出现于operator=右侧。 int func() { return 5; } 通过std::move()函数可以从左值得到右值。 28、右值经由一个函数A传给另一函数B是会变为左值的。 void B(int&& i) void A(int&& i) A(5); 29、移动构造函数和移动赋值函数要把传入对象的成员变量的指针置为nullptr,并且在析构函数的时候要判断-不为空的时候进行delete。
但是如果是容器(对整个容器的操作),容器就必须要有移动构造函数和移动赋值函数。 31、 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:54:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |