У меня есть 2 вопроса, связанные с одной и той же проблемой:
-
Как вернуть ссылку на вектор, принадлежащий классу?
У меня есть этот класс:
class sys{ protected: vector<int> s; public: sys(); vector<int>& getS() {return s;} //(1) };
(1) должен вернуть ссылку вектора
s
. Однако вmain()
:main(){ sys* my_sys = new sys(); vector<int> &t1 = my_sys->getS(); //(2) vector<int> t2 = my_sys->getS(); //(3) ... }
-
t1
является ссылкой наs
(т.е. при измененииt1
my_sys.s
). -
t2
- COPYs
(т.е. при измененииt2
my_sys.s не изменяется).
Почему работает строка (3)?
-
-
Я не хочу, чтобы было возможно изменить
my_sys.s
вне класса, но я хочу вернуть ссылку из-за эффективности. Где я могу поставитьconst
?Я попытался изменить строку (1) на
const vector<int>& getS() {return s;} //(4)
но я не уверен, что этого достаточно.