跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 运算符重载最佳实践
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 最佳实践 == === 1. 遵循运算符的原始语义 === 运算符重载应尽量保持与内置类型相同的语义。例如: * <code>+</code> 应该表示加法,而不是减法或其他操作。 * <code>==</code> 应该用于比较相等性,而不是其他用途。 '''反例:''' <syntaxhighlight lang="cpp"> // 错误:重载 + 运算符实现减法 Vector operator+(const Vector& other) const { Vector result; result.x = x - other.x; // 违反直觉 result.y = y - other.y; return result; } </syntaxhighlight> === 2. 优先选择成员函数或全局函数 === * 赋值运算符(<code>=</code>)、下标运算符(<code>[]</code>)、函数调用运算符(<code>()</code>)和成员访问运算符(<code>-></code>)'''必须'''作为成员函数重载。 * 对称运算符(如 <code>+</code>、<code>==</code>)通常应作为全局函数实现,以支持隐式类型转换。 '''示例:''' <syntaxhighlight lang="cpp"> // 全局函数实现 + 运算符 Vector operator+(const Vector& a, const Vector& b) { Vector result; result.x = a.x + b.x; result.y = a.y + b.y; return result; } </syntaxhighlight> === 3. 处理自赋值 === 对于赋值运算符(<code>=</code>),必须正确处理自赋值情况: <syntaxhighlight lang="cpp"> Vector& Vector::operator=(const Vector& other) { if (this == &other) { // 检查自赋值 return *this; } x = other.x; y = other.y; return *this; } </syntaxhighlight> === 4. 返回引用还是值 === * 赋值类运算符(<code>=</code>, <code>+=</code>, <code>-=</code> 等)应返回 '''引用'''。 * 算术运算符(<code>+</code>, <code>-</code>, <code>*</code> 等)应返回 '''值'''。 '''示例:''' <syntaxhighlight lang="cpp"> // 返回引用 Vector& operator+=(const Vector& other) { x += other.x; y += other.y; return *this; } // 返回值 Vector operator+(const Vector& a, const Vector& b) { return Vector(a.x + b.x, a.y + b.y); } </syntaxhighlight> === 5. 提供配套运算符 === 如果重载了 <code>==</code>,通常也应该重载 <code>!=</code>;如果重载了 <code><</code>,应考虑重载 <code>></code>, <code><=</code>, <code>>=</code>。 '''示例:''' <syntaxhighlight lang="cpp"> bool operator==(const Vector& a, const Vector& b) { return a.x == b.x && a.y == b.y; } bool operator!=(const Vector& a, const Vector& b) { return !(a == b); // 重用 == 的实现 } </syntaxhighlight>
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)