浅谈C++11中=delete的巧妙用法

 更新时间:2022年01月25日 14:53:34   作者:爱就是恒久忍耐  
本文主要介绍了C++11中=delete的巧妙用法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错。

#include <cstdio>
class TestClass
{
public:
    int func(int data)=delete;
};

int main(void)
{
    TestClass obj;
    obj.func(100);

    return 0;
}

编译时直接报错,如下,

在这里插入图片描述

在C++11之前,当我们希望一个类不能被拷贝,就会把构造函数定义为private,但是在C++11里就不需要这样做了,只需要在构造函数后面加上=delete来修饰下就可以了。

巧妙用法

这里说个=delete的巧妙用法,在C++里会有很多隐式类型转换,如下代码,

#include <cstdio>
class TestClass
{
public:
    void func(int data) { printf("data: %d\n", data); }
};
int main(void)
{
    TestClass obj;
    obj.func(100);
    obj.func(100.0);
    return 0;
}

输出如下,

在这里插入图片描述

当我们把100.0传给obj.func()时,发生了隐式类型转换,由double转为了int,有时我们不希望发生这样的转换,我们就是希望传进来的参数和规定的类型一致,那么此时可以使用=delete来达到这个目的,如下,

#include <cstdio>
class TestClass
{
public:
    void func(int data) { printf("data: %d\n", data); }
    void func(double data)=delete;
};
int main(void)
{
    TestClass obj;
    obj.func(100);
    obj.func(100.0);
    return 0;
}

我们把参数类型是double的重载函数加上=delete进行修饰,表示这个函数被删除,那么用户就不能使用这个函数了,这样再编译就会出错,

在这里插入图片描述

总结

本文是对《C++ Weekly -Ep 107》的简单总结。如果有写的不对的地方,请留言指正,谢谢。

相关文章

  • opencv3/C++关于移动对象的轮廓的跟踪详解

    opencv3/C++关于移动对象的轮廓的跟踪详解

    今天小编就为大家分享一篇opencv3/C++关于移动对象的轮廓的跟踪详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C语言中求解图形的问题

    C语言中求解图形的问题

    这篇文章主要介绍了C语言中求解图形的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 一篇文章带你了解C++Primer学习日记--处理数据

    一篇文章带你了解C++Primer学习日记--处理数据

    今天小编就为大家分享一篇关于C++对数器的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • C++ 面向对象程序设计--内存分区详解

    C++ 面向对象程序设计--内存分区详解

    这篇文章主要介绍了剖析C++的面向对象编程思想,C++的面向对象特性是其对C语言的重要拓展之处,需要的朋友可以参考下,希望能够给你带来帮助
    2021-08-08
  • C语言制作贪吃蛇小游戏

    C语言制作贪吃蛇小游戏

    这篇文章主要为大家详细介绍了C语言制作贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 基于C++中常见编译错误的总结详解

    基于C++中常见编译错误的总结详解

    本篇文章是对C++中的常见编译错误进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言多功能动态通讯录实现示例

    C语言多功能动态通讯录实现示例

    这篇文章主要为大家介绍了C语言多功能动态通讯录实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Qt5开发视频播放器的项目实践

    Qt5开发视频播放器的项目实践

    Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持,本文主要介绍了Qt5开发视频播放器,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C++编程产生指定范围内的随机数

    C++编程产生指定范围内的随机数

    这篇文章主要为大家详细介绍了C++编程产生指定范围内的随机数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 创建二叉树 二叉树如何删除节点操作教程

    创建二叉树 二叉树如何删除节点操作教程

    本文将详细介绍二叉树的创建,节点删除,节点增加等一系列操作方法,需要的朋友可以参考下
    2012-12-12

最新评论