深入理解C++ 重载 <十二> 重载按位与运算符

发布时间:2026/10/2 20:08:56

深入理解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/10/2 20:08:56

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

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

2026/10/2 20:08:56

ax 编排入口实战:从零跑通 agentic 工作流与 Kubernetes workspace

1. 从“ax”这个标题说起:一个被低估的自动化编排入口第一次看到“ax”这个标题,很多人会一头雾水——两个字母,既不像某个知名框架的缩写,也不像某个具体工具的名字。但如果你最近在折腾agentic orchestration、kubernetes works…

2026/10/2 21:08:58

又见循环移位

题面https://codeforces.com/contest/2266/problem/D 题解https://www.luogu.com.cn/article/pk0sh4ce思路Code: void solve() {int n; cin>>n;vector<int>a(n1,0);for(int i1;i<n;i){cin>>a[i];a[i]-i;}sort(a.begin()1,a.end());a.erase(unique(a.begin…

2026/10/2 21:08:58

快乐8走势分析系统:从数据采集到回测的完整统计管线

简介&#xff1a;这是一套面向快乐8&#xff08;KL8&#xff09;彩票走势分析的个人学习型工具&#xff0c;采用Python工程化结构&#xff0c;可直接本地部署、开箱即用&#xff0c;适合具备基础Python能力、希望用数据化方式复盘历史开奖的爱好者。资源包共75个文件&#xff0…

2026/10/2 21:08:58

社交网络分析实验:从图论建模到PageRank与社区发现实战

简介&#xff1a;面向哈尔滨工业大学计算机课程实验的社交网络分析资料包&#xff0c;适用于计算机相关专业学生的课程设计与实验报告撰写&#xff1b;资料围绕社交网络分析展开&#xff0c;涵盖数据预处理、图论基础、算法编程实现、数据可视化、社区检测及中心性分析等关键知…

2026/10/2 21:03:58

两位五通电磁阀,三位五通电磁阀

目录两位五通电磁阀&#xff1a;先导式电磁阀和直动式电磁阀的区别&#xff1a;单电控和双电控区别&#xff1a;三位五通电磁阀&#xff1a;分类&#xff1a;中封&#xff0c;中泄&#xff0c;中压总结&#xff1a;两位五通电磁阀&#xff1a; 分类&#xff1a;直动式和先导式…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集&#xff1a;Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”&#xff0c;是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时&#xff0c;手抖得连gdb的c命令都输错三次。那道题只有23行C代码&#xff0c;一个gets()调用&#xff0c;一个printf()&#xff0c;一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候&#xff0c;我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配&#xff0c;按 CUDA 文档的说法&#xff0c;这块内存应该落在系统 RAM 里&#xff0c;跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑