深入理解C++ 重载 <十三> 重载按位或运算符|

发布时间:2026/10/3 6:14:55
深入理解C++ 重载 <十三> 重载按位或运算符| C 中的|运算符重载详解1. 什么是|运算符重载|是 C 中的按位或运算符Bitwise OR。通过运算符重载我们可以让自定义类型类/结构体也支持|操作赋予它符合语义的行为。|是一个二元运算符重载时可以写成成员函数ReturnType operator|(const OtherType other) const;左操作数是this非成员函数友元/自由函数ReturnType operator|(const T a, const T b);更推荐支持隐式转换2. 典型应用场景|重载在 C 中最常见的用途是组合标志位Flags比如Qt 中的Qt::AlignmentFlagQt::AlignLeft | Qt::AlignTopstd::ios::openmodestd::ios::in | std::ios::out自定义权限/选项系统3. 关键点要点说明返回值通常返回新对象值而非引用参数用const避免拷贝const 修饰成员函数版应加const不修改自身常与、|、^一起重载形成完整位运算族不要滥用只在语义清晰如标志位时重载避免歧义#include iostream #include string class Permissions { private: unsigned int flags_; public: // 权限枚举每个值对应一个二进制位 enum Flag { None 0, Read 1 0, // 0001 Write 1 1, // 0010 Execute 1 2 // 0100 }; // 构造函数允许从 Flag 隐式构造 Permissions(unsigned int f None) : flags_(f) {} // 重载 | 组合两个权限返回新对象 Permissions operator|(const Permissions other) const { return Permissions(flags_ | other.flags_); } // 重载 判断是否包含某个权限 Permissions operator(const Permissions other) const { return Permissions(flags_ other.flags_); } // 重载 | 就地组合 Permissions operator|(const Permissions other) { flags_ | other.flags_; return *this; } // 判断是否含有某个权限 bool has(Flag f) const { return (flags_ f) ! 0; } // 便于打印 std::string toString() const { std::string s; if (has(Read)) s R; if (has(Write)) s W; if (has(Execute)) s X; return s.empty() ? (none) : s; } }; int main() { Permissions r(Permissions::Read); Permissions w(Permissions::Write); Permissions x(Permissions::Execute); // 使用 operator| Permissions rw r | w; std::cout r | w rw.toString() \n; // RW // 链式组合 Permissions rwx r | w | x; std::cout r | w | x rwx.toString() \n; // RWX // 使用 operator| Permissions p(Permissions::Read); p | Permissions::Execute; std::cout p (R | X) p.toString() \n; // RX // 使用 operator 判断 std::cout rwx w ? ((rwx w).toString()) \n; // W // has() 检查 std::cout rwx has Write? (rwx.has(Permissions::Write) ? yes : no) \n; std::cout r has Write? (r.has(Permissions::Write) ? yes : no) \n; return 0; }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询