C++11 (C++2.0)笔记 一

简介: C++11 (C++2.0)笔记 一

Variadic Templates    数量不定的模板参数

针对函数:

这种特性可以用来递归调用。这个递归的作用是把不定个数的参数 一 一 分解 。 当我们在使用这个模板特性的时候一定要写一个处理最后一种情况的东西,在这里是一个函数 print() 。因为最后一次递归调用的时候参数为空。

c++11之后模板参数的尖括号可以写到一起了(编译器变得越来越智能)

nullptr 和 nullptr_t

auto

Uniform Initialization

Initializer_List<>  

编译器看到{}之后会调用initializer_list的构造函数,传进去两个参数,一个array的头部和一个大小,事实上编译器在调用构造函数之前已经准备好了一个array。

initializer_list对象只是引用了array的第一个元素,指向他,并不是把整包东西传递进去,再进行拷贝的时候,也是只创建了一个新的iterator指向同一个array,浅拷贝。

标准库新增的版本,     min 和 max 都可以接收任意个数的参数进行比较。

explicit for ctors taking more than one argument

c++2.0之前  :   explicit 告诉编译器不要自作聪明帮我做构造函数的隐士转换, 要在我明确调用构造函数的时候才使用。    2.0之前只可以提供单一的参数,2.0之后可以提供多个参数的版本。  本质都是不希望编译器帮我们做隐士类型转换。

range based for statement   (for循环的特殊写法)

利用迭代器将coll(容器)里的元素一个一个的取出来赋值到decl身上,然后执行statement。

如果两边类型不一致编译器会进行类型转换。

c++2.0有两个函数 begin()和end()是可以直接接收容器的

=default , =delete

一个类如果带有指针成员, 那么一定要自己定义big three,如果是普通成员则大多数都不需要自己写出。

Alias Template(template typedef)   模板别名

使用iterator_traits萃取器将容器的迭代器传进去有一个value_type函数可以得到容器的类型。

template template parameter  模板模板参数

当你将一个模板当作参数传递给另一个模板时,编译器没有办法知道你的第二个参数有默认值,而且第二个参数的类型依赖第一个参数。

使用alias  template 可以解决这个问题。

Type Alias (similar to typedef)

using 多种用法

noexcept

保证这个函数不抛出异常,但是是可以有先决条件的 noexcept(  true ) 。

如果你的class里面有move function ,一定要注意不要抛出异常,写上noexcept让编译器放心的调用你,也让使用者放心的使用。

override   复写,改写  应用到虚函数身上

当你要复写虚函数的时候,告诉编译器,把你的心意告诉它,我就是要复写虚函数,帮助编译器帮你检查错误。

final

第一种用法:  放在类里面,告诉编译器,我就是继承体系下的最后一个类final,不能再继承我了。让有类继承我的时候,就会报错。

第二种用法:  针对虚函数。     意思是这个虚函数不允许被复写。

decltype        

第一种应用:   宣告一个返回值类型。  返回类型后置。

第二种用法:适用于原编程。

模板只是一个半成品,具体能不能用还得看二次编译后的情况。

第三种用法:

Lambdas

lambdas 本质是个对象(可以想象成一个函数对象) , 加小括号调用lambdas表达式。  auto l 意思是我先把这个lambdas记录起来  ,  然后   l()    调用它。     上面那个lambdas 只可以调用一次,下面这个可以多次调用。   当你只是临时想到一些东西的时候可以直接写出来,不必做成函数调用的形式。

如果那三个可选项写了一个以上,那小括号就一定要写。否则可以不写小括号。

如果是按值捕获,想要修改的话要加上mutable。

lamdbas没有默认构造函数, 如果给一个容器指定了lambdas的比较器,那么在定义这个容器的对象的时候也要把lambdas作为参数传递给这个容器。  lambdas是内联的

目录
相关文章
|
2月前
|
Java 编译器 C++
C++入门指南:类和对象总结笔记(下)
C++入门指南:类和对象总结笔记(下)
29 0
|
2月前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
34 0
|
2月前
|
安全 程序员 Linux
【C++】—— c++11之智能指针
【C++】—— c++11之智能指针
|
2月前
|
并行计算 安全 程序员
【C++】—— C++11之线程库
【C++】—— C++11之线程库
|
2月前
|
编译器 C++
【C++】—— c++11新的类功能
【C++】—— c++11新的类功能
|
2月前
|
算法 编译器 C++
【C++】—— c++11新特性之 lambda
【C++】—— c++11新特性之 lambda
|
2天前
|
安全 Java 程序员
【C++笔记】从零开始认识继承
在编程中,继承是C++的核心特性,它允许类复用和扩展已有功能。继承自一个基类的派生类可以拥有基类的属性和方法,同时添加自己的特性。继承的起源是为了解决代码重复,提高模块化和可维护性。继承关系中的类形成层次结构,基类定义共性,派生类则根据需求添加特有功能。在继承时,需要注意成员函数的隐藏、作用域以及默认成员函数(的处理。此外,继承不支持友元关系的继承,静态成员在整个继承体系中是唯一的。虽然多继承和菱形继承可以提供复杂的设计,但它们可能导致二义性、数据冗余和性能问题,因此在实际编程中应谨慎使用。
5 1
【C++笔记】从零开始认识继承
|
7天前
|
设计模式 安全 编译器
【代码片段】【C++】C++11线程安全单例模式
【代码片段】【C++】C++11线程安全单例模式
12 1
|
18天前
|
存储 安全 编译器
【C++进阶】C++11入门基础
【C++进阶】C++11入门基础
24 0
|
2月前
|
编译器 C语言 C++
C++入门指南:类和对象总结笔记(中)
C++入门指南:类和对象总结笔记(中)
49 0