【发布时间】:2020-10-16 12:00:23
【问题描述】:
我想返回一个 const 引用,所以我不能更改对象本身,但我可以调用它们的非 const 方法。但我不知道该怎么做。
使用指针很容易,我可以在 const 指针 (const myclass*) 或指向 const 值的指针 (myclass const*) 之间进行选择。但是对于引用,它的工作方式似乎不一样,我所得到的只是对 const 对象的引用,所以我不能调用非 const 方法。
我确定我做错了什么。
class A {
int a;
public:
auto get() const { return a; }
auto set(int i) -> void { a = i; }
};
class B {
A a_;
public:
auto get() const -> const A& { return a_; }
};
我能做到:
B b;
cout << b.get().get();
但不是:
B b;
b.get().set(100); // compiler error
我不想
class B {
A a_;
public:
auto get() -> A& { return a_; }
};
B b;
A a;
b.get() = a; // I don't want this!
【问题讨论】:
-
"我想返回一个 const 引用,因此我不能更改对象本身,但我可以调用它们的非 const 方法"。这些是相互矛盾的要求。
-
见What is the xy problem?。为什么你认为你需要这个?您要解决的实际问题是什么?
-
您无法更改引用所指的对象,因此以
T* const的方式“const 引用非 const”(T& const)将毫无意义。 -
如果您希望能够通过其成员修改对象,但不分配给它,您也不能使用指针来执行此操作(除非您将其设为完全不可分配)。跨度>
-
“我想返回一个 const 引用,所以我不能更改对象本身” - 你这样说,但是你的示例尝试通过调用
set(100)来更改对象。 ..?