const
의 정답을 해결하는 중 하나는 반쯤 할 수 없다는 것입니다. 그것은 모두 또는 아무것도 아닙니다. 중간에 그걸하려고하면 여기있는 것처럼 힘든 자리에 들게됩니다. 좋은 const
-correct class는 const
-correct가 아닌 보통의 레거시 코드 (또는 오래된 crummudgeon으로 작성된 코드)에 의해 사용되고 있으며 작동하지 않습니다. const
- 정정이 모든 문제의 가치가 있는지 궁금하게 남았습니다.
I need to call a non-const method [from a const method]
직접하실 수 없습니다. 너도 그래. 그러나 대안이 있습니다 ...
분명히 const
메서드에서 비 const
메서드를 호출 할 수 없습니다. 그렇지 않으면 const
은 멤버 함수에 적용될 때 아무런 의미가 없습니다.
const
멤버 함수는 멤버 변수를 mutable
으로 변경할 수 있지만 사용자는이를 허용하지 않습니다.
당신은 SomeClass* me = const_cast<SomeClass*>(this);
같은 작업을 수행하여 멀리 const
다움을 캐스팅하려고 시도 할 수 있지만 A)이 일반적으로 UB가 발생합니다, 또는 2) const
-correctness의 모든 생각을 위반하는 것입니다.
당신이 할 수있는 한 가지, 실제로 이루고자하는 것이 이것이 const
프록시 개체를 만들지 않고 const
-y로 처리하는 것입니다. 위트하려면 :
#include <iostream>
#include <string>
using namespace std;
class Gizmo
{
public:
Gizmo() : n_(42) {};
void Foo() const;
void Bar() { cout << "Bar() : " << n_ << "\n"; }
void SetN(int n) { n_ = n; };
int GetN() const { return n_; }
private:
int n_;
};
void Gizmo::Foo() const
{
// we want to do non-const'y things, so create a proxy...
Gizmo proxy(*this);
int save_n = proxy.GetN();
proxy.SetN(save_n + 1);
proxy.Bar();
proxy.SetN(save_n);
}
int main()
{
Gizmo gizmo;
gizmo.Foo();
}
const 함수가되는 기본 규칙에 위배되지 않습니까? – DumbCoder
@DumbCoder, 바깥 쪽에서는 클라이언트가 볼 수있는 것이 아무것도 변경되지 않았다는 점에서 const 함수입니다. –
비 const 메서드는 개체의 일부 데이터를 변경한다는 의미입니다. 'someMethod()'가 비 const 메소드를 호출하면 간접적으로 데이터가 변경됩니다. 그래서 정말로,'someMethod()'는 단지'const'가되어서는 안됩니다. –