iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >浅谈C++11中=delete的巧妙用法
  • 747
分享到

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

2024-04-02 19:04:59 747人浏览 八月长安
摘要

目录巧妙用法总结c++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数

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》的简单总结。如果有写的不对的地方,请留言指正,谢谢。

--结束END--

本文标题: 浅谈C++11中=delete的巧妙用法

本文链接: https://www.lsjlt.com/news/163740.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅谈C++11中=delete的巧妙用法
    目录巧妙用法总结C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数...
    99+
    2024-04-02
  • 浅谈C++11中的几种锁
    目录互斥锁(mutex)条件锁(condition_variable)自旋锁(不推荐使用)递归锁(recursive_mutex)互斥锁(mutex) 可以避免多个线程在某一时刻同时...
    99+
    2024-04-02
  • 浅谈MyBatis中@MapKey的妙用
    目录MyBatis @MapKey的妙用背景实现源码分析思考Mybatis @MapKey分析1. MapKey注解有啥功能2. MapKey的源码分析1. MapperMethod...
    99+
    2024-04-02
  • 浅谈JavaScript中的parseInt()的妙用
    起因 写这篇博客的起因是今天在刷leetcode的每日一题,是一道字符串转换整数 (atoi)的题,感兴趣的话可以点击题目名称去看一下具体描述。在我多次debug终于成功提交之后,去...
    99+
    2024-04-02
  • C++11中=delete的用法是什么
    本篇文章为大家展示了C++11中=delete的用法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"...
    99+
    2023-06-29
  • 浅谈c++11闭包的实现
    目录什么是闭包仿函数:重载 operator()std::bind绑定器std::bindstd::bind和std::function配合使用什么是闭包 一个函数,带上了一个状态,...
    99+
    2024-04-02
  • 浅谈c++11线程的互斥量
    目录为什么需要互斥量独占互斥量std::mutex原子操作为什么需要互斥量 在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着...
    99+
    2024-04-02
  • 浅谈C#中[]的几种用法
    目录一、导入外部DLL函数二、结构体时表明属性一、导入外部DLL函数 如[DllImport(“kernel32.dll”)]这叫引入kernel32.dll...
    99+
    2023-01-28
    C# []用法 C# []
  • 浅谈C++11的std::function源码解析
    目录1、源码准备2、std::function简介3、源码解析3.1、std::function解析3.2、std::_Function_handler解析3.3、_Any_data...
    99+
    2024-04-02
  • 浅谈C++11的std::mem_fn源码解析
    目录1、源码准备2、通过一个简单的例子来了解std::mem_fn的作用3、std::mem_fn源码解析3.1、std::mem_fn解析3.2、std::_Mem_fn解析3.3...
    99+
    2024-04-02
  • Python中的@cache巧妙用法
    目录Python中的@cache有什么妙用?@cache缓存功能介绍@cache的应用场景补充:Python @cache装饰器Python中的@cache有什么妙用? 缓存是一种空...
    99+
    2023-05-15
    Python中@cache Python @cache用法
  • C++11新特性“=default”,“=delete”的使用
    1、 =default 和=delete 概述 任何事物的出现都必然有着其出现的理由,伴随着每一个新的概念产生都会带来一系列的便利和价值。C++在不断的演变与发展,与此同时,伴随着...
    99+
    2024-04-02
  • 浅谈Java多线程处理中Future的妙用(附源码)
    java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果。在两种情况下,离开Future几乎很难办。一种情况是拆分订单,比如你的应用收到一个批量订单,此时如果要求最快的处理订单,那么需要并...
    99+
    2023-05-31
    java 多线程 ava
  • C++11中新特性“=default”,“=delete”如何使用
    小编给大家分享一下C++11中新特性“=default”,“=delete”如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、 =default 和=de...
    99+
    2023-06-15
  • 浅谈PHP7中的一些小技巧
    目录相同的命名空间,相同的 use常量可以是数组太空船操作符数组的第一 / 最后一个键 (PHP 7.3)数组延展操作符 (PHP 7.4)箭头函数 (PHP 7.4)常量的可见性 ...
    99+
    2024-04-02
  • 浅谈replaceAll的用法
    replaceAll是一个字符串的方法,用于替换字符串中的指定字符或字符序列。它的用法如下:1. replaceAll(String...
    99+
    2023-09-09
    replaceAll
  • 浅谈Vue3中watchEffect的具体用法
    前言 watchEffect,它立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。 换句话说:watchEffect相当于将watch 的依赖源...
    99+
    2024-04-02
  • 浅谈SQL中Partition的相关用法
    目录PARTITION OVERROW_NUMBER()RANKDENSE_RANKNTILE使用Partition可以根据指定的列或表达式将数据分成多个分区。每个分区都是逻辑上独立的,可以单独进行查询、插入、更新和删除...
    99+
    2023-10-11
    SQL Partition
  • 浅谈一下Python中的with用法
    目录一、With语句是什么二、with如何工作三、相关术语一、With语句是什么 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常...
    99+
    2023-05-15
    Python with Python with用法
  • 浅谈Java中String的常用方法
    String中常用的方法,我以代码的形式,来说明这些常用的方法。 @Test public void test1(){ //1.返回字符串的长度 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作