C++中combine函数返回*this的作用是什么?
为什么Sales_data::combine要返回*this?
先看你提供的代码:
Sales_data& Sales_data::combine(const Sales_data &rhs) { units_sold += rhs.units_sold; // add the members of rhs into revenue += rhs.revenue; // the members of ''this'' object return *this; // return the object on which the function was called }
你说得没错,改成void确实能完成单次合并的核心操作,但返回*this(准确说是当前对象的引用)是为了支持更灵活的用法,主要有这几个原因:
支持链式调用:
要是返回引用,你可以把多个合并操作串起来写,比如:Sales_data data1, data2, data3; // 一次性把data2、data3都合并到data1里 data1.combine(data2).combine(data3);要是返回
void,你就得拆成两行单独调用,链式写法在多合并场景下更简洁。贴合C++编程惯例:
C++里像operator+=这类操作符,不管是内置类型还是自定义类,通常都会返回自身的引用,这种设计是行业通用的惯例,用户用起来会觉得符合直觉,和已有代码风格统一。允许在表达式中直接复用结果:
比如你想合并后直接获取对象的ISBN或者输出,可以这么写:cout << data1.combine(data2).isbn() << endl;要是返回
void,这行代码会直接报错——因为void类型没法调用后续的.isbn()方法。
简单说,返回*this不是为了完成单次合并的基础功能,而是为了让这个函数的用法更灵活,给后续代码留足扩展空间,同时贴合C++的通用编程习惯。
内容的提问来源于stack exchange,提问作者Saad Khan
相关产品推荐
相关产品推荐

