C++ 中面向对象的接口设计杂谈

news/2026/1/27 9:44:03/文章来源:https://www.cnblogs.com/caijianhong/p/19536692

C++ 中面向对象的接口设计杂谈

原地修改?返回新对象?

我们来学点语法,关于 C++ 中类的 API 设计。

class Image {
public:// 原地修改版本Image& rotate(double angle) {// 实现...return *this;}// 返回新对象版本Image rotated(double angle) const {Image copy = *this;copy.rotate(angle);  // 重用原地修改的实现return copy;}
};

有时需要维护一个对象的操作,这个操作的自修改写法比较简单,但是我们难免可能用到需要原对象不变而返回新对象的操作,我们可以像上面 rotated 函数一样写三行,复制-修改-返回(你最好别写别的;如果对象很大的话,这是最优解)。对应的 rotate 函数可以 return *this; 方便进行链式调用。

如果是反过来,自修改比较难绷,返回新对象的写法比较简单,那就写成静态成员函数或外部友元函数(如果全是 public 成员,写外部函数也行)。对应的自修改版本则直接 *this = func(*this);。例如 operator+ 比较简单,你就写这个,然后需要用到 operator+= 的时候,就 return *this = *this + rhs;

引用延长生存期的规则

另外有一个难绷的误区,const auto&auto&& 两个引用延长生存期,是当把临时对象绑定到它们时延长生存期,不是把引用绑定到它们,这可能导致悬垂引用。典型的误区形如用 const auto&auto&& 接受一个返回 auto& 的函数的返回值,这是可能错误的,如果这个引用是临时对象的(典型如临时对象的 return *this),那么就会爆炸,直接用 auto 接受就可以了。但也不是说它们就不能接受引用了,只要你能保证引用所指的位置不会被提前析构掉就能接受。即要么绑定临时对象,要么绑定到生存期更长的对象的引用,否则将悬垂。注意绑定到临时对象的一部分也是悬垂,这和绑定临时对象引用是一个原理。

一个难绷的例子是 std::minmax - cppreference.cn - C++参考手册。如果 minmax 其中一个参数是临时对象,则返回的引用在包含对 minmax 调用的完整表达式结束时会变成悬空引用。这个例子套了一层 pair,问题会比较隐蔽。

int n = 1;
auto p = std::minmax(n, n + 1);
int m = p.first; // ok
int x = p.second; // undefined behavior
 
// Note that structured bindings have the same issue
auto [mm, xx] = std::minmax(n, n + 1);
xx; // undefined behavior

那当然 std::min - cppreference.cn - C++参考手册也一样有问题。如果其中一个参数是临时变量并且返回该参数,则通过引用捕获 std::min 的结果也会产生悬空引用。

int n = -1;
const int& r = std::min(n + 2, n * 2); // r is dangling

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1223411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026钙钛矿外观缺陷检测设备技术应用与发展动态

钙钛矿材料作为新能源、光电等领域的关键基础材料,其外观质量直接影响终端产品性能与安全性。在钙钛矿薄膜、电池组件等生产过程中,划痕、鼓包、杂质等外观缺陷可能导致产品良率下降、使用寿命缩短,因此高精度、高效…

最新靠谱京东e卡回收平台指南

随着京东e卡市场流通量扩大,闲置卡券回收需求激增。据行业统计,2025年超四成闲置卡券通过专业平台完成变现。面对海量京东e卡回收渠道,如何选择安全、高效、透明的平台?本文从资质、效率、价格三大核心维度,为您梳…

HoRain云--深入解析Linux内核current机制

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

百考通AI:您的智能学术加速器,让期刊论文写作从“苦差事”变“快车道”

在科研的征途上,撰写一篇符合目标期刊要求、逻辑严谨、内容充实的高质量论文,是每一位学者和学生必须跨越的高峰。然而,从选题立意、框架搭建到数据处理、文献综述,每一个环节都可能成为阻碍进度的“拦路虎”。面对核心期刊的高门…

百考通AI:您的智能数据分析师,让复杂洞察一键生成

在当今这个数据驱动的时代,无论是学术研究、商业决策还是市场运营,数据分析都已成为不可或缺的核心能力。然而,对于非专业人员而言,面对海量数据和复杂的分析工具,如何快速、准确地提炼出有价值的洞察,往往…

百考通AI:您的智能问卷设计专家,让调研从“耗时耗力”到“一键生成”

在市场研究、用户洞察、学术调查乃至内部管理的每一个环节,一份设计精良的问卷都是获取有效数据、驱动决策的关键起点。然而,设计一份既能精准捕捉信息、又能保证用户体验的问卷,往往需要耗费大量的时间与专业技巧。从确定目标、筛选受众、构…

AlphaFold五年成就:AI重塑生物学研究

AlphaFold: Five Years of Impact 自2020年以来,AlphaFold加速了科学进程并推动了全球范围内的生物学发现浪潮——这一成就已获得诺贝尔奖的认可。 五年前,AlphaFold 2解决了蛋白质结构预测问题,为生物学研究开辟了新的途径,并首次…

百考通AI:引领智能学习新纪元,打造个性化备考全能助手

在信息爆炸的时代,每一位考生都面临着海量知识筛选、高效复习规划与精准应试训练的多重挑战。如何从繁杂的学习资料中快速提取重点?如何在有限时间内实现系统化知识掌握?如何借助科技力量实现高效、个性化、科学化的备考?百考通AI…

百考通AI:不只是降重,更是质量重塑的智能写作伙伴

在人工智能日益普及的今天,无论是学术研究者、职场人士还是广大学生,都面临着文本创作与优化的共同挑战:如何提升文章质量、降低重复率、优化内容结构,同时保持专业与自然?百考通AI(https://www.baikaotong…

百考通AI:智能文本处理的终极入口,您的高效写作与学习伙伴

在这个信息高速流转、知识更新迭代的时代,每个人都可能面临这样的瞬间:一份至关重要的论文需要紧急优化,一份项目报告亟待润色提升,或者一批学习资料渴望系统梳理。当您面对这些文本处理需求时,您需要的是一个稳定、强…

百考通AI:您的智能文献研究伙伴,从标题到参考文献一站智成

在学术研究和论文写作的道路上,文献工作往往是最耗时却又最关键的环节。选题初期如何快速建立知识图谱?文献综述怎样才能既全面又有深度?参考文献格式整理为何总是繁琐易错?百考通AI(https://www.baikaotongai.com&…

Redis各种架构安装部署

本教程将演示在 linux 环境下安装 Redis7,给⼤家最简单,最快捷的安装⽅式,其中包括单机部署、主从部署、哨兵部署、集群部署的安装以及相应的架构介绍。 一、单机部署 1. 检查安装 gcc 环境 Redis是由C语⾔编写的,它的运⾏需要C环…

百考通AI:您的智能学术助手,让开题报告写作化繁为简

在当今快节奏的学术与职场环境中,高效、精准地完成一份高质量的开题报告,是每一个学生和研究者面临的共同挑战。从选题的迷茫、框架的搭建,到文献的搜集与整理,再到创新点的提炼与论证,每一个环节都耗费着大量的时间与…

矿山“数字皮带秤”:AI纠偏让输送损耗<0.2%

皮带输送是矿山物料转运的核心环节,输送精度与皮带跑偏控制直接决定物料损耗与生产效率。传统矿山皮带秤依赖人工校准,无法实时识别皮带跑偏、物料偏载等问题,不仅计量误差大,还易因跑偏导致物料洒落、皮带磨损,输送损…

空气源热泵机组远程监控与能源管理系统方案

行业背景目前,我国大力推行可持续发展和清洁供暖的战略,加上能源成本不断增加、环境污染不断加剧等因素,引导供暖行业的绿色、节能发展已势在必行。空气源热泵作为一种高效能量转换装置,通过消耗少量电力将低品位热能转化为高品位…

解读上海、苏州PCBA厂商口碑,推荐几家可靠的?

在电子制造领域,找到靠谱的PCBA生产商是产品落地的关键一步,但很多企业尤其是中小科技公司,在选择PCBA厂商时常常陷入迷茫——市场上的PCBA制造商推荐信息鱼龙混杂,如何判断哪家能真正匹配自身需求?深圳硬之城信息…

关注2026年1月,口碑佳的有机肥造粒机实力厂家排行来了,药材粉碎机/高速粉碎机/大型木材粉碎机,造粒机供应商选哪家

在当今环保意识日益增强、农业可持续发展需求不断提升的背景下,有机肥的市场需求持续增长,这也带动了有机肥造粒机行业的蓬勃发展。有机肥造粒机作为生产有机肥的关键设备,其性能优劣直接影响到有机肥的质量和生产效…

高温持久蠕变试验机选购指南:哪个品牌质量好、耐用且口碑佳?

高温持久蠕变试验是评估金属、合金及先进材料在高温和长期应力作用下性能退化的关键手段,其结果直接关系到航空航天发动机、电站锅炉、核电设备等重大装备的服役安全、寿命预测与设计优化。随着我国高端制造业向高参数…

详细介绍:数据分析报表如何选?详解 DataEase 四大表格:明细表、汇总表、透视表与热力图的适用场景与选择策略

详细介绍:数据分析报表如何选?详解 DataEase 四大表格:明细表、汇总表、透视表与热力图的适用场景与选择策略2026-01-27 09:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wr…

如何防范日益增长的数据威胁?

信息安全(简称信安)涵盖各类工具与流程,用于防范、检测并补救针对数字化和非数字化敏感信息的网络攻击与安全威胁,同时也负责对影响信息安全的流程、威胁及系统进行归档记录。下文将为您介绍信息安全的相关知识。 如上所述&#x…