千家信息网

C++怎么将重载的运算符定义在操作对象的命名空间内

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章主要讲解了"C++怎么将重载的运算符定义在操作对象的命名空间内",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++怎么将重载的运算符定义在操作
千家信息网最后更新 2025年02月08日C++怎么将重载的运算符定义在操作对象的命名空间内

这篇文章主要讲解了"C++怎么将重载的运算符定义在操作对象的命名空间内",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++怎么将重载的运算符定义在操作对象的命名空间内"吧!

C.168: 将重载的运算符定义在操作对象的命名空间内

Reason(原因)

可读性。提供使用ADL发现操作符的能力。避免不同命名空间中的不一致。

Example(示例)

struct S { };
bool operator==(S, S); // OK: in the same namespace as S, and even next to S
S s;

bool x = (s == s);

这正是默认相等比较运算符做的事情,如果存在这么一个默认的话。

Example(示例)

namespace N {
struct S { };
bool operator==(S, S); // OK: in the same namespace as S, and even next to S
}

N::S s;

bool x = (s == s); // finds N::operator==() by ADL

Example, bad(反面示例)
struct S { };
S s;

namespace N {
S::operator!(S a) { return true; }
S not_s = !s;
}

namespace M {
S::operator!(S a) { return false; }
S not_s = !s;
}

代码中N和M两个命名空间中!s的含义不一样。这会非常混乱。如果去掉命名空间M的定义又会增加出错的可能。

Note(注意)

如果为不同命名空间内的两个不同的类型定义二目运算符,你无法遵守本准则。例如:

Vec::Vector operator*(const Vec::Vector&, const Mat::Matrix&);

这可能是最好状态了。

See also(参照)

这可以说是【帮助函数应该和它帮助的类定义在一个命名空间内】规则的特例。

Enforcement(实施建议)

  • 标记没有和操作对象定义在同一个命名空间中的运算符。

感谢各位的阅读,以上就是"C++怎么将重载的运算符定义在操作对象的命名空间内"的内容了,经过本文的学习后,相信大家对C++怎么将重载的运算符定义在操作对象的命名空间内这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

空间 运算符 运算 对象 C++ 不同 示例 学习 两个 内容 帮助 一致 混乱 事情 代码 准则 函数 原因 反面 可读性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器冗余电源负载 gp数据库字符串字节长度 工行软件开发中心西安 江西省开设网络安全专业的大学 网络安全的属性主要包括 网络安全示范单位创建汇报材料 rng在哪个服务器打排位 更新一下数据库 软件开发工时评估方法 辽阳建江网络技术 酒泉日报网络安全专家库仪式 学校网络安全论文有哪些创新点 自由职客网络技术有限公司贵阳 云服务器主要运营商 手机版有转化桌的怎么开服务器 美国开元化合物毒性数据库 南通软件开发定制费用 中央小组网络安全管理 本地数据库ip 视觉算法软件开发 欧洲数字网络安全建议 数据库服务行业运用的弊端 铜陵咖啡点餐软件开发多少钱 软件开发 外包 合同模版 java软件开发工程师应聘 淄博市计算机软件开发公司 网络安全这个行业能不能做 如何缩短软件开发进度 服务器通讯网络时延151ms 网络安全攻防讲座
0