C++中能否实现返回多个char成员变量引用的成员函数?
问题描述
我需要编写一个类的成员函数,返回多个char成员变量的引用。现有类定义如下:
class Foo { public: Foo() {// ... constructor } std::string& func(); private: char ch1 = 'a', ch2 = 'b', ch3 = 'c'; };
我尝试的以下代码无法满足需求,因为局部变量的生命周期仅限于函数调用范围:
std::string& func() { std::string total = ""; total += this->ch1; total += this->ch2; total += this->ch3; return total; }
同时我不想使用new为局部变量分配内存后再手动delete,也不愿为类新增用于返回的成员变量。请问这种需求是否可行?若可行,该如何实现?
解决方案
你的需求是可行的,核心是要避开返回局部对象引用的错误做法,结合你的限制条件,有两种合理实现方式:
1. 返回std::string值而非引用
如果你的实际需求是把多个char成员拼接成字符串返回,直接返回字符串对象即可。现代C++的返回值优化会自动消除不必要的拷贝,性能无额外损耗,同时彻底避免悬垂引用问题:
std::string func() { std::string total; total += ch1; total += ch2; total += ch3; return total; }
2. 返回多个char成员的独立引用
如果你确实需要返回每个char成员的单独引用,可以用std::tuple来封装多个引用:
#include <tuple> std::tuple<char&, char&, char&> func() { return {ch1, ch2, ch3}; }
使用时可以通过C++17的结构化绑定直接获取引用,修改这些引用会直接作用于原类对象的成员:
Foo foo; auto [ch1_ref, ch2_ref, ch3_ref] = foo.func(); ch1_ref = 'x'; // 直接修改foo的ch1成员
内容的提问来源于stack exchange,提问作者Amolgorithm
相关产品推荐
相关产品推荐

