讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

Laper
Laper

剧本策划到成片协作

Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

C++中default和delete关键字用法_C++显式要求或禁用成员函数【语义】

老宇姑娘_7906

老宇姑娘_7906

发布时间:2026-02-12 10:37:33

|

830人浏览过

|

来源于php中文网

原创

=default让编译器生成默认实现,仅适用于编译器本可隐式生成的特殊成员函数;=delete彻底禁用函数调用,优先级高于重载解析,可用于任何函数。

c++中default和delete关键字用法_c++显式要求或禁用成员函数【语义】

default 关键字:让编译器生成默认实现,但只在需要时才显式写出来

当类中已定义了其他构造函数(比如带参数的),编译器就不会自动生成默认构造函数。这时若仍需默认构造函数,不能靠删掉已有构造函数来“恢复”,而应显式用 = default 声明——它把控制权交还给编译器,生成符合语义的默认版本。

常见误用是以为 = default 只能写在类内,其实它也可放在类外定义处(前提是函数签名匹配且未被隐式删除);但注意:= default 不能用于已用户自定义实现的函数,也不能用于析构函数以外的虚函数(C++11 起允许虚析构函数用 = default)。

  • = default 的函数必须是编译器本可隐式生成的(如默认构造、拷贝/移动构造、赋值、析构)
  • 放在类内声明处更常见,且会隐式成为 inline
  • 若类含不可默认构造的成员(如引用或 const 成员),即使写了 = default,定义也会编译失败

delete 关键字:彻底禁用某个函数,比私有化更彻底

= delete 不是“不写”,而是“明确禁止调用”。它比将函数声明为 private 更严格:后者可能被友元或成员函数调用,而 = delete 让任何位置的调用都触发编译错误,且错误信息更清晰(提示“deleted function”)。

典型使用场景包括:禁用拷贝(如资源独占类)、禁用窄化转换的构造函数、禁用某些模板实例化。

立即学习“C++免费学习笔记(深入)”;

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 可以对任何函数(包括普通成员、全局函数、模板特化)使用 = delete
  • 必须写在声明处(类内或类外均可),且优先级高于重载解析——一旦匹配到 deleted 版本,直接报错,不继续找其他重载
  • 例如禁用 int 到 MyClass 的隐式构造:MyClass(int) = delete;,此时 MyClass x = 42; 编译失败

default 和 delete 在特殊成员函数中的协同语义

特殊成员函数(默认/拷贝/移动构造与赋值、析构)的行为高度互斥。比如:只要定义了移动操作,编译器就不再生成拷贝操作(除非显式 = default);若想保留拷贝但禁用移动,就得手动写拷贝并 = delete 移动函数。

这种组合不是语法糖,而是表达设计意图:你清楚知道哪些操作有意义、哪些会破坏不变量。

  • 显式 = default 拷贝构造 + = delete 移动构造 → 表示“只支持拷贝,不支持移动”
  • 仅声明 = delete 拷贝构造,不写移动构造 → 编译器仍可能生成移动构造(若满足条件),需一并 = delete 才真正禁用所有拷贝/移动
  • 若基类析构函数是 = default 且非虚,派生类继承后若需多态销毁,必须显式声明虚析构并 = default 或自定义,否则行为未定义

容易被忽略的细节:模板和 deleted 函数的冲突

模板函数的实例化可能意外匹配到 deleted 版本,导致看似无关的调用失败。例如一个泛型 swap 模板若对某类型调用了被 = delete 的拷贝构造,错误发生在实例化点,而非模板定义处。

更隐蔽的是:如果某个 = delete 函数签名恰好比预期更宽泛(比如接受任意 T&& 的模板构造函数),它可能在重载解析中“抢走”本该调用其他函数的调用,然后因 deleted 报错——这不是 bug,而是重载规则使然。

  • 检查错误时别只盯报错行,要看模板实参推导路径和所有候选函数声明
  • 用 static_assert 配合 std::is_copy_constructible_v<t></t> 等 trait,比依赖 = delete 更早暴露问题
  • = delete 对于函数模板,必须放在声明处,且不能只对部分特化 = delete 而不声明主模板(否则 SFINAE 不生效)

热门AI工具

更多
SoundView
SoundView Hot

SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

375

2025.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2458

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7519

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3565

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4708

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

3145

2025.08.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

411

2026.03.13

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

3571

2023.11.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn