当前位置: 首页 > news >正文

网站开发用什么语言比较流行网站建设未验收会计账务处理

网站开发用什么语言比较流行,网站建设未验收会计账务处理,开发网站哪家好,jq网站特效插件Effective C 条款24:若所有参数皆需类型转换,请为此采用non-member函数核心思想:当函数需要对其所有参数(包括被this指针指向的隐式参数)执行隐式类型转换时,必须将其声明为非成员函数,以支持所…

Effective C++ 条款24:若所有参数皆需类型转换,请为此采用non-member函数


核心思想当函数需要对其所有参数(包括被this指针指向的隐式参数)执行隐式类型转换时,必须将其声明为非成员函数,以支持所有参数的对称转换。

⚠️ 1. 成员函数的转换限制

不对称类型转换问题

class Rational {
public:Rational(int n = 0, int d = 1);  // 支持int→Rational转换// 成员函数乘法const Rational operator*(const Rational& rhs) const;
};Rational r(1,2);
Rational result1 = r * 2;  // 正确:r.operator*(Rational(2))
Rational result2 = 2 * r;  // 错误!2.operator*(r) 不存在

编译器视角

result1 = r.operator*(Rational(2));  // 隐式转换右侧操作数 → 有效
result2 = 2.operator*(r);            // 尝试对字面量2调用成员函数 → 无效

🚨 2. 解决方案:非成员函数支持对称转换

对称转换实现

class Rational {
public:Rational(int n = 0, int d = 1); int numerator() const;   // 访问私有数据的公共接口int denominator() const;private:int n_, d_;
};// 非成员函数运算符
const Rational operator*(const Rational& lhs, const Rational& rhs) {return Rational(lhs.numerator() * rhs.numerator(),lhs.denominator() * rhs.denominator());
}// 现在支持对称转换
Rational r(1,2);
Rational r1 = r * 2;  // 正确:operator*(r, Rational(2))
Rational r2 = 2 * r;  // 正确:operator*(Rational(2), r)

效率优化技巧

// 直接访问私有数据(声明为友元)
const Rational operator*(const Rational& lhs, const Rational& rhs) {return Rational(lhs.n_ * rhs.n_,    // 直接访问私有成员lhs.d_ * rhs.d_);
}
// 需在类内声明:friend const Rational operator*(const Rational&, const Rational&);

⚖️ 3. 关键原则与设计决策
设计方式类型转换支持封装性扩展性
成员函数仅右侧参数支持转换高(访问私有)低(需修改类)
非成员非友元全部参数支持对称转换高(公共接口)高(外部实现)
友元函数全部参数支持对称转换中(访问私有)中(需声明友元)

混合运算支持

// 支持多种混合运算
Rational r = 3.5 * Rational(1,2);  // double→Rational转换// 实现:
const Rational operator*(double lhs, const Rational& rhs) {return Rational(lhs) * rhs;
}

现代C++优化

// 使用模板减少重载数量
template<typename T1, typename T2>
auto operator*(T1&& lhs, T2&& rhs) -> std::enable_if_t<std::is_convertible_v<T1, Rational> && std::is_convertible_v<T2, Rational>,Rational>
{return Rational(std::forward<T1>(lhs)) * Rational(std::forward<T2>(rhs));
}

💡 关键原则总结

  1. 对称转换原则
    • 当所有参数都需要类型转换 → 使用非成员函数
    • 特别是运算符重载(+、-、*、/等)
  2. 封装性优先策略
    • 优先使用非成员非友元函数(通过公共接口)
    • 仅在必要时使用友元(需直接访问私有数据)
  3. 隐式转换控制
    • 谨慎使用单参数构造函数(可能导致非预期转换)
    • 使用explicit禁用非必要转换
  4. 模板扩展技巧
    • 使用模板支持多种类型混合运算
    • 结合std::enable_if约束类型

错误设计重现

class Complex {
public:Complex(double re, double im = 0);// 成员函数加法Complex operator+(const Complex& rhs) const;
};Complex c(1,1);
Complex sum1 = c + 2.5;  // 正确:c.operator+(Complex(2.5))
Complex sum2 = 2.5 + c;  // 错误!无法调用2.5.operator+(c)

安全重构方案

class Complex {
public:Complex(double re, double im = 0);double real() const { return re_; }double imag() const { return im_; }private:double re_, im_;
};// 非成员函数支持对称转换
Complex operator+(const Complex& lhs, const Complex& rhs) {return Complex(lhs.real() + rhs.real(),lhs.imag() + rhs.imag());
}// 使用示例
Complex c(1,1);
Complex sum1 = c + 2.5;  // 正确:operator+(c, Complex(2.5))
Complex sum2 = 2.5 + c;  // 正确:operator+(Complex(2.5), c)// 可选:友元实现(直接访问私有数据)
Complex operator-(const Complex& lhs, const Complex& rhs) {return Complex(lhs.re_ - rhs.re_,   // 直接访问私有成员lhs.im_ - rhs.im_);
}
// 类内需声明友元
http://www.dtcms.com/a/500044.html

相关文章:

  • openKylin 2.0版本学习入门
  • 如何用php数据库做网站搜狗收录提交
  • 人工智能三要素→ 数据 算力 算法
  • 做教育视频网站用什么平台好wordpress内网
  • 域名做好了怎么做网站内容网站搭建百家号
  • Spyder下载安装图文教程(附安装包,适合新手)
  • 南宁手机平台网网站建设龙岗建设工程交易中心官网
  • 网站移动端开发需要哪些技术ai代码生成器
  • 静态网页建站装饰画
  • 电商运营如何提升自身技能素质
  • iptables 防火墙详解与实用配置指南
  • 湖南网站建设加盟代理企业微营销网站
  • 可以大量免费发帖的网站wordpress存档显示文章所有内容
  • BPMN.js与LogicFlow流程设计器核心技术解析
  • python程序打包成win的exe应用(以OCR应用为例)
  • 建设营销型网站价格wordpress固定连接nginx
  • DRF:Django REST Framework框架介绍
  • 不备案 网站 盈利合肥做个网站多少钱
  • 做网站只用php不用html扬中网站建设哪家好
  • Linux内核idr数据结构使用
  • 3.3栈与队列的应用
  • 黑龙江网站开发公司宁波网站建设制作的公司
  • 《CopyOnWriteArrayList / CopyOnWriteArraySet 源码与“大对象复制”事故实录》
  • 做网站的品牌公司有哪些安康市110报警平台
  • 三水住房和城乡建设局的网站一键生成logo免费图
  • 自用EUBIU
  • 省住房城乡建设厅网站保险查询平台
  • 智能PDU在数据中心场景中的应用与解决方案
  • 网站登录界面图片用什么软件做深圳关键词优化报价
  • 中信建设证券官方网站佛山网页设计怎么做