栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ 11/14 笔记自用 (1)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ 11/14 笔记自用 (1)

Variadic Templates数量不定的模板参数


这是一个模板函数

  • typename后的… 表示’一包‘参数,类型任意。 注意…的位置,语法规定,记住就行
  • 只有typename是关键字,Type,arg都是自己命名
  • 于是上图的print函数 是递归打印不定个数,不定类型的参数
  • 1的定义必须有,不然只有一个参数时,会编译错误
    可以并存


蓝框处是调用hash_val函数,调用的函数1。(2和3的第一个参数类型不符合)1在函数内再调用hash_val(),而2更加特化,1更泛化,因此选择调用函数2,2递归调用自己直到arg不够,到3终止,3是种终止条件必须有不断的继承,参数减少,空参数的tuple必须存在,终止条件

Spaces in Template Expressions 模板标识中的空格

vector >以前的空格必须存在,现在不用

nullptr and std::nullptr_t

auto

自动推导类型

auto i=42;//int
double f();
auto d=f();//double

主要用于type很长或者很复杂

vector v;
auto it=v.begin();//vector::iterator
auto I=[](int x) ->bool{ //I has type of lambda
	...
};
Uniform Initialization 一致性初始化


初始化时,可以在变量名后加{},进行初始化

Initializer Lists

在一个变量或者对象后面加{},进行初始化,就是形成了一个Initializer Lists,会关联到一个array,如果构造函数中没有以 Initializer Lists为参数的(所有的容器都有这样的构造函数),那就会将{}中的元素一个一个拆解进行赋值

int i;//未初始化
int j{};//j=0
int *p;//未初始化
int *q{};//q=nullptr
int i(5.3);//可以,但是i=5
int i{5.3};//不可以,不可以窄化转化

例子一
接受任意数量的参数,
’一包‘参数
例子二
initializer_list 数据结构

在底层是进行一个浅拷贝,

  • 算法中的max(),min()以前只能接受两个参数,现在可以用大括号包起来,任意多的参数
    *
explicit for ctors taking more than one argument 在多于一个参数的构造函数前加explicit
  • 2.0之前 只能用在单参数(一个形参和一个有默认值的形参也算)的构造函数前,此构造函数会不能进行隐式转换,参数必须完全符合才可以调用,否则报错
range-based fir statment
for( decl : coll ){
	statment
}
vector vec;
for(auto elem:vec){//将vec中的元素一个一个复制到elem中,
	cout<//想要修改只能用引用,且使用引用更快,引用只有四个字节
	elem *= 3
}
=default ,=delete

C++中,当我们设计与编写一个类时,若不显著写明,则类会默认为我们提供如下几个函数:

(1)构造函数
(2)析构函数
(3)拷贝构造函数
(4)拷贝赋值函数(operator=)
(5)移动构造函数
如果自己定义了一个ctor(构造函数),那么编译器就不会在给一个default ctor(默认构造),如果强制在(big three 拷贝构造,=的操作符重载,析构函数)后面加上=default,就会获得default ctor,=delete就是不要



拷贝构造和拷贝赋值(=操作符重载)都只能存在一个,因此只能用=delete

  • ps:当一个类存在指针成员的时候,都需要自己定义big three,如果没有就不需要写

C++开发中,我们经常需要控制某些函数的生成,例如不希望函数被复制,被生成。在C++11之前,我们经常的普遍做法是将其声明为类的 private 成员函数,这样若在类外这些这些函数的操作时候,编译器便会报错,从而达到效果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010244.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号