深入理解C++ 重载 <十二> 重载按位与运算符
C 重载按位与运算符operator详解一、什么是按位与运算符的重载C 中的是一个二元运算符默认对整数执行按位与cppint a 0b1100; int b 0b1010; int c a b; // 0b1000和、-、|一样也可以被重载让用户自定义类型也能用运算。cppclass T { public: T operator(const T rhs) const { // 返回一个新的 T } };调用形式cppT x, y; T z x y; // 等价于 x.operator(y)二、为什么按位与的重载比取地址安全得多对比一元operator取地址二元operator的重载要温和很多对比项一元operator二元operator破坏语言假设是地址语义否影响标准库严重无常见性极少较常见推荐度强烈不建议视场景而定二元operator只是一个普通运算符重载和operator完全对等不会破坏语言机制。三、典型应用场景场景说明位标志 (bit flags)Permissions、FileMode等组合与查询集合运算用位图表示集合表示交集DSL / 表达式模板构建查询表达式如filter condition矩阵/向量按元素与数值计算库中按元素逻辑与智能位集类自定义bitset风格的类其中位标志是最经典、最实用的场景。#include iostream #include string // 权限标志用无符号整数表示每一位 enum class Perm : unsigned { None 0, Read 1u 0, // 001 Write 1u 1, // 010 Execute 1u 2, // 100 }; // 权限集合类 class Permissions { public: // 默认构造无权限 Permissions() : bits_(0) {} // 从单个权限构造 Permissions(Perm p) : bits_(static_castunsigned(p)) {} // 从原始位构造显式避免隐式转换 explicit Permissions(unsigned bits) : bits_(bits) {} // 重载按位与 // 语义返回两个权限集合的交集 Permissions operator(const Permissions rhs) const { return Permissions(bits_ rhs.bits_); } // 重载按位与赋值 Permissions operator(const Permissions rhs) { bits_ rhs.bits_; return *this; } // 顺带重载 | 和 | Permissions operator|(const Permissions rhs) const { return Permissions(bits_ | rhs.bits_); } Permissions operator|(const Permissions rhs) { bits_ | rhs.bits_; return *this; } // 转 bool非空即可判断为 true explicit operator bool() const { return bits_ ! 0; } // 判断是否包含某个权限 bool has(Perm p) const { return (bits_ static_castunsigned(p)) ! 0; } unsigned raw() const { return bits_; } private: unsigned bits_; }; // 让 Permissions Perm 也能用对称性 inline Permissions operator(Permissions lhs, Perm rhs) { return lhs Permissions(rhs); } int main() { // 组合Read | Write Permissions rw Permissions(Perm::Read) | Permissions(Perm::Write); std::cout rw.bits rw.raw() \n; // 3 // 1) 用 求交集rw Read Permissions onlyRead rw Permissions(Perm::Read); std::cout onlyRead.raw onlyRead.raw() \n; // 1 // 2) 用 if (p mask) 做权限检查 if (rw Permissions(Perm::Read)) { std::cout 有读权限\n; } if (!(rw Permissions(Perm::Execute))) { std::cout 没有执行权限\n; } // 3) 用 has() 更直观 std::cout has(Write)? rw.has(Perm::Write) \n; // 1 std::cout has(Execute)? rw.has(Perm::Execute) \n; // 0 // 4) 用 原地取交集 Permissions p Permissions(Perm::Read) | Permissions(Perm::Write); p Permissions(Perm::Read); std::cout p.raw p.raw() \n; // 1 return 0; }

相关新闻

查重风暴来袭!2026年DeepSeek保姆级降AI指令+4款工具亲测(附避坑指南)

查重风暴来袭!2026年DeepSeek保姆级降AI指令+4款工具亲测(附避坑指南)

最近收到不少私信提问,很多学弟学妹问:“用DeepSeek调整完的内容,AI检测率还是不达标该怎么办?” 2026年各高校的AIGC检测严格度大幅提升,知网、维普、万方都迭代了检测算法,直接照搬AI生成内容提交&#x…

2026/10/3 20:17:20 阅读更多 →
华硕ROG枪神装Ubuntu双系统避坑指南:从BIOS到驱动全流程

华硕ROG枪神装Ubuntu双系统避坑指南:从BIOS到驱动全流程

想给华硕ROG枪神装Ubuntu双系统的人,大概率不是第一次折腾Linux,但这台机器总能把你的自信磨掉一层。装Windows它比谁都流畅,一到Ubuntu就花式翻车:安装界面黑屏、不认NVMe、装完WiFi失踪、NVIDIA驱动上不去、开机直接进错系统&am…

2026/10/3 20:18:12 阅读更多 →
MCP+A2A+Skills+DeepAgents:多智能体企业级落地实战

MCP+A2A+Skills+DeepAgents:多智能体企业级落地实战

如果你最近在做 AI Agent 相关的工程落地,大概率绕不开这四个关键词:DeepAgents、MCP、A2A、Skills。我最初看到"超级多智能体"这个概念时,第一反应是又一个炒作词汇——毕竟多智能体从强化学习时代就一直有人在提,但真…

2026/10/3 20:13:03 阅读更多 →

最新新闻

使用 Drizzle ORM 创建 bigint 自增主键(Identity Column)完整指南

使用 Drizzle ORM 创建 bigint 自增主键(Identity Column)完整指南

文档教程知识库 【免费下载链接】til :memo: Today I Learned 项目地址: https://gitcode.com/gh_mirrors/ti/til 点击查看 免费下载 在使用 Drizzle ORM 操作 PostgreSQL 时,如何为表定义一个既具备 bigint 数据类型、又使用现代 identity column 机制…

2026/10/4 1:51:35 阅读更多 →
MCP协议实现AI自主读取功耗数据的技术实践

MCP协议实现AI自主读取功耗数据的技术实践

1. 项目概述:为什么需要让 AI “自己看” 功耗计? “让 AI 自己看功耗计”——这句话乍听像科幻设定,但落到 IoT 工程现场,它其实是一句极其务实的工程宣言。我第一次在产线调试边缘网关时,就卡在了这个环节&#xff…

2026/10/4 1:51:35 阅读更多 →
Android内置RTSP服务器:实现局域网低延迟视频推流与播放

Android内置RTSP服务器:实现局域网低延迟视频推流与播放

做局域网视频传输的朋友一定有过这种憋屈时刻:临时想把手机摄像头画面投到会议大屏,或者把一台设备的摄像头画面共享给局域网里几台机器同时看,结果发现不是得装一堆App,就是绕道公网平台,延迟高还受网络限制。于是我就…

2026/10/4 1:51:35 阅读更多 →
Apache Fesod(Incubating) Fesod Sheet 快速上手:一个示例玩转 Excel 读写

Apache Fesod(Incubating) Fesod Sheet 快速上手:一个示例玩转 Excel 读写

后端 【免费下载链接】fesod Fast. Easy. Done. Processing spreadsheets without worrying about large files causing OOM. 项目地址: https://gitcode.com/gh_mirrors/fast/fesod 点击查看 免费下载 Apache Fesod(Incubating) 的 fesod-sheet 模块提供了一套以 …

2026/10/4 1:51:35 阅读更多 →
Arnis:用地理数据快速生成真实的Minecraft城市

Arnis:用地理数据快速生成真实的Minecraft城市

Arnis:用地理数据快速生成真实的Minecraft城市 【免费下载链接】arnis Generate any location from the real world in Minecraft with a high level of detail. 项目地址: https://gitcode.com/GitHub_Trending/ar/arnis 不想逐格放方块,只想在M…

2026/10/4 1:51:35 阅读更多 →
计算机网络运输层详解:多路复用、UDP、TCP与可靠传输原理

计算机网络运输层详解:多路复用、UDP、TCP与可靠传输原理

简介:这份PPT课件面向计算机专业学生及网络初学者,系统讲解计算机网络体系结构中的运输层核心知识,帮助读者从自顶向下的视角理解端到端通信原理。内容围绕运输层服务展开,涵盖多路复用与多路分解、UDP无连接传输、可靠数据传输原…

2026/10/4 1:50:35 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →