2023年c语言中default的作用 c语言default怎么用大全
人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便于保存一份美好的回忆。写范文的时候需要注意什么呢?有哪些格式需要注意呢?下面是小编帮大家整理的优质范文,仅供参考,大家一起来看看吧。
c语言中default的作用 c语言default怎么用篇一
c语言是一门实践性和动手能力要求很高的大学主干课程,但是c语言实验课的教学一直不受重视,教学效果也不太理想。下面小编就跟你们详细介绍下c语言中default的用法,希望对你们有用。
a.类中默认的成员函数
1.默认构造函数
2.默认析构函数
3.拷贝构造函数
4.拷贝赋值函数
5.移动构造函数
6.移动拷贝函数
b.类中自定义的操作符函数
or
or&
or&&
or*
or->
or->*
or new
or
同时c++规定,一旦程序员实现了这些函数的自定义版本,则编译器不会再自动生产默认版本。注意只是不自动生成默认版本,当然还是可手动生成默认版本的。当我们自己定义了待参数的构造函数时,我们最好是声明不带参数的版本以完成无参的变量初始化,此时编译是不会再自动提供默认的无参版本了。我们可以通过使用关键字default来控制默认构造函数的生成,显式地指示编译器生成该函数的默认版本。比如:
classmyclass
{
public:
myclass()=default; //同时提供默认版本和带参版本,类型是pod的
myclass(inti):data(i){}
private:
int data;
};
有些时候我们希望限制默认函数的生成。典型的是禁止使用拷贝构造函数,以往的做法是将拷贝构造函数声明为private的并不提供实现,这样当拷贝构造对象时编译不能通过,c++11则使用关键字显式指示编译器不生成函数的默认版本。比如:
classmyclass
{
public:
myclass()=default;
myclass(constmyclass& )=;
......
}
当然,一旦函数被过了,那么重载该函数也是非法的,该函数我们习惯上称为删除函数。
上面我们已经看到在类中我们可用default和修饰成员函数,使之成为缺省函数或者删除函数,在类的外面,default可以在类定义之外修饰成员函数,比如:
classmyclass
{
public:
myclass()=default;
myclass() &operator=(constmyclass& );
);
//在类的定义外用default来指明缺省函数版本
inlinemyclass&myclass::operator=(constmyclass& )=default;
还可以myclass&myclass::operator=(constmyclass& )=default;但是这种类外定义合成的成员就不是内联函数。
与=default 不同,=必须出现在函数的第一次声明中。因为一个默认的成员只影响为这个成员生成的代码,因此=default 直到编译生成代码时才需要,而编译器必须早早知道一个函数是否是删除的,以便禁止试图使用它的操作。
一般情况下,析构函数不能定义为删除的,因为如果析构函数被删除,就无法删除此类型的对象了。对于一个删除了析构函数的类型,编译器将不允许定义该类型的变量或创建该类型的临时对象,而且如果一个类有某个成员的类型删除了析构函数,也不能定义该类的变量或临时对象,因为一个成员的析构函数是删除的,则该成员无法销毁,包含它的类也就没法销毁。虽然对于删除了析构函数的.类型,我们不能定义这种类型的变量或成员但可以动态分配这种类型的对象,比如:
structnodtor{
nodtor()=default;
~nodtor()=default;
};
nodtor *p=new nodtor();//正确,但是我能 p
但是有时析构函数也是可以的,这样做的目的是我们在指定内存位置进行内存分配时并不需要析构函数来完成对象级别的清理,这时我们可显示删除析构函数来限制自定义类型在栈上或者静态的构造。
关于的显式删除,并非局限于成员函数,比如:
voidfunc(inti){};
void func(char c)=; //显式删除char版本
int main()
{
func(3);
func('c’); //无法编译通过
return 0;
}
这里因为func的char版本已经被删除,故func('c')会编译失败。由此我们也知default是只局限作用于类的部分成员函数的。于是我们还可用来避免不必要的隐式数据类型转换。比如:
classmyclass
{
public:
myclass(inti){};
myclsss(char c)=; //删除char版本的构造函数
};
void fun(myclass m){}
int main()
{
func(3);
func('a'); //编译不能通过
myclassm1(3);
myclass m2('a'); //编译不能通过
}
这是因为char版本的构造函数被删除后,试图从char构造myclass对象的方式是不允许的了。但去掉这句的函数删除后,编译器会隐式的将a转换为整型使得编译通过,调用的是整型构造函数,这可能并不是你所想要的。
但是如果这样:
classmyclass
{
public:
myclass(inti){};
explicit myclsss(char c)=; //删除explicit的char版本的构造函数
};
void fun(myclass m){}
int main()
{
func(3);
func('a'); //编译可通过
myclassm1(3);
myclass m2('a'); //编译不能通过
}
将构造函数explicit后,构造函数一样的还是不能发生char的构造,因为char构造版本被删除了,但在func的调用中,编译器会尝试将c转换为int,即func(\a')会调用一次myclass(int )构造,顺利通过编译。于是我们不提倡explicit和混用。对与普通函数也有类型的效果。
的用法还包括删除operator new操作符,编码在堆上分配该类的对象
如:void* operator new(std::size_t)=;
合成的拷贝控制成员可能是删除的,如果一个类有数据成员不能默认构造、拷贝、复制或销毁,则对应的成员函数将被定义为删除的。因此:
如果类的某个成员的析构函数是删除的或不可访问的,那么类的合成析构函数被定义为删除的。
如果类的某个成员的拷贝构造函数是删除的或不可访问的,则类的合成拷贝构造函数也被定义为删除的。
如果类的某个成员的拷贝赋值运算符是删除的或不可访问的,或是类有一个const的或引用成员,则类的合成拷贝赋值运算符被定义为删除的。
如果类的某个成员的析构函数是删除的或不可访问的,或是类有一个引用成员,它没有类内初始化器,或是类有一个const成员,它没有类内初始化器且其类型未显示定义默认构造函数,则该类的默认构造函数被定义为删除的
s("content_relate");【c语言中default的用法】相关文章:
c语言中assert用法12-03c语言中的assert用法12-19c语言中free的用法12-09c语言中bit的用法12-07c语言中sscanf的用法11-17c语言中time函数的用法12-21c语言中map的基本用法12-18c语言中map的用法简介12-18c语言中char的用法简介12-16
-
c语言心得体会 我的c语言学习心得体会(大全9篇)
-
2023年c语言简短代码大全
-
c语言模拟题库大全
-
最新c语言的声明语句通用
-
2023年c语言循环队列的实现 c语言循环语句示例汇总
-
最新初学c语言的心得体会 c语言学习心得体会(实用20篇)
-
c语言从零开始学实用
-
2023年大学c语言知识点笔记 大学c语言基础考试知识点(五篇)
-
C语言的读书心得
-
c语言心得体会500字 c语言心得体会字(五篇)
-
2023年c语言编程心得体会通用
-
2023年c语言心得体会(通用17篇)
-
c语言的心得体会(实用9篇)
-
全国计算机二级c语言答案 计算机二级c语言题库及答案通用
-
2023年c语言试题及答案 c语言试题及答案解析优质
-
大学c语言基础知识点 大学c语言程序设计知识点(5篇)
-
C语言论文致谢
-
C语言实习总结
-
2023年学c语言心得体会(实用9篇)
-
2023年c语言测试题目及答案大全
-
c语言实验报告
-
C语言实训报告
-
win10运行c语言汇总
-
最新大学c语言基础知识点 大学c语言程序设计知识点(五篇)
-
学c语言心得体会 我的c语言学习心得体会(精选13篇)
-
最新c语言心得体会(大全11篇)
-
全国计算机二级c语言答案实用
-
初学c语言的心得体会 c语言学习心得体会(精选20篇)
-
学c语言心得体会(通用9篇)
-
C语言实验报告《数组》
-
c语言实训报告范文
-
c语言学习心得体会
-
2023年c语言实训心得体会200字 c语言实训心得体会800字(5篇)
-
2023年计算机二级c语言上机题库 计算机二级c语言上机操作题精选
-
最新c语言实训总结200字实用
-
c语言实践报告(三篇)
-
C语言实验报告《指针》
-
C语言实践心得体会
-
c语言实习心得范文
-
计算机c语言实验报告3篇(大全)
-
最新学c语言心得体会(大全8篇)
-
大学c语言基础知识(5篇)
-
最新c语言心得体会(通用18篇)
-
C语言实验报告《函数》
-
c语言实训报告范文
-
C++语言开发个人简历
-
c语言编程实习心得
-
c语言程序示例汇总
-
最新c语言文件操作解析详解及实例代码 c语言文件操作rb精选
-
2023年c语言编程时常犯错误17个问题 c语言编程容易出现的错误优秀
-
2023年static和const关键字的作用 c语言static和const的区别实用
-
2023年c语言的心得体会(优秀18篇)
-
大学c语言基础知识点(五篇)
-
最新c语言模拟试题及答案实用
-
c语言的心得体会(模板8篇)
-
c语言跳出循环break汇总
-
最新初学c语言的心得体会(大全17篇)
-
2023年语c对戏车戏 语c对戏聊天记录大全(3篇)
-
最新c语言的连接符号优秀
-
2023年c语言心得体会500字(五篇)
-
C语言实践心得体会范文
-
C语言程序设计实验报告
-
最新c语言的心得体会(五篇)
-
最新学c语言心得体会 语言学习心得体会(大全8篇)
-
最新c语言文件的基本操作模板
-
最新c语言的36个关键字优质
-
C语言实验报告《综合实验》
-
c语言实习心得体会范文
-
c语言编程实习心得范文
-
2023年c语言字符串数组函数优质
-
2023年语言与编程心得体会 c语言编程心得体会(通用8篇)
-
最新数据结构c语言版(五篇)
-
c语言实训总结500字(三篇)
-
计算机二级考试c语言考试时间实用
-
最新C语言的预处理功能是指 C语言的预处理命令只能实现宏定义和条件编译功能大全
-
最新c语言程序设计课程心得体会 c语言程序设计体会(汇总3篇)
-
2023年c语言实训心得体会200字(5篇)
-
2023年c语言中使用快速排序算法对元素排序的实例分析实用
-
计算机专业c语言实训报告
-
计算机二级考试c语言考试流程实用
-
最新c语言的心得体会(模板11篇)
-
2023年计算机c语言实训总结(十六篇)
-
2023年c语言环境变量配置详解精选
-
2023年c语言实训心得体会(优秀8篇)
-
计算机专业c语言实训报告
-
最新c语言优缺点简述精选
-
最新c语言心得体会300字(5篇)
-
初学c语言的心得体会(优质20篇)
-
最新c语言心得体会(汇总18篇)
-
c语言从键盘输入数据的代码模板
热点推荐
上一篇:初级会计实务考前冲关题答案汇总
下一篇:最新安全施工协议书范文6篇