함수가 reference
의 매개 변수를 const object
으로 가져갈 때 인수로 전달 된 개체를 reference
을 사용하여 수정할 수 없다는 것을 알고 있습니까? 그래서 C++에서 const object
에 대한 참조를 통해 수정할 수있는 시나리오가 있습니까? 그렇다면 예를 보여주십시오.참조를 사용한 const 개체 수정
2
A
답변
4
C++는 데이터 멤버 심지어 const를 참조을 통해 을 변경할 수 있습니다 mutable
라는 기능이 있습니다
class Foo {
public:
int a;
mutable int b;
};
int main() {
Foo f;
f.a = 1; // ok
f.b = 2; // ok
const Foo &g = f;
g.a = 1; // compile error
g.b = 2; // ok
}
I을 다음 오류가 발생합니다.
In function 'int main()': Line 12: error: assignment of data-member 'Foo::a' in read-only structure compilation terminated due to -Wfatal-errors.
그러나 할당 g.b = 2;
이 성공합니다.
이 기능은 대개 private
멤버 변수에만 사용되며 데이터 멤버를 변경해도 개체의 외부에서 볼 수있는 constantness에 영향을주지 않습니다. 예를 들어, 이전에 계산 된 값을 캐시하는 방법을 제공하기위한 최적화로 사용될 수 있습니다.
1
을 사용하면 항상 const
정도를 버릴 수 있습니다. 주의하지 않으면 정의되지 않은 동작이 발생할 수 있습니다.
나는 당신이 뭔가를 고안있을 것 같아요 :
class Foo
{
private:
mutable int x;
public:
void bar() const { x++; }
};
void func(const Foo &foo)
{
foo.bar();
// foo is now modified!
}
+0
구체적인 질문은 * C++에서 const 개체를 참조 할 수있는 시나리오가 있습니까? *. 기술적으로, 객체 *가 const 인 경우 const const - Dess를 캐스팅하고이를 사용하여 수정하면됩니다. Undefined Behavior * always * –
관련 문제
- 1. const 포인터가 참조를 반환합니다.
- 2. 함수에서 const 참조를 반환하는 중
- 3. C++의 const 개체
- 4. const 개체 전달 방법
- 5. const std :: string 참조의 참조를 변경합니다.
- 6. 개체 참조를 JSON에 serialize
- 7. iOS가 개체 참조를 변경합니까?
- 8. 개체 참조를 문자열로?
- 9. 개체 참조를 설정하는 방법
- 10. 참조하는 CONST 개체/C에서 포인터 ++
- 11. 키를 사용한 오류 수정
- 12. insertSort를 사용한 quickSort 수정
- 13. "셀"참조를 사용한 범위 참조
- 14. C++은 const 객체 참조를 함수에 전달합니다.
- 15. C++에서 메서드에서 const 문자열 참조를 전달합니까?
- 16. AfterInsert/AfterUpdate에서 개체 수정
- 17. OpenGL에서 개체 수정
- 18. 양식의 개체 자동 수정
- 19. 참조로 smarty 개체 수정
- 20. 개체 수정 추적
- 21. ArrayList 내에서 개체 수정
- 22. 클릭시 개체 수정 방법
- 23. 개체의 참조를 통해 개체 만들기
- 24. C#의 Const 개체 (매개 변수로)
- 25. 개체 목록에서 비 const 멤버에 액세스
- 26. IoC를 사용한 개체 트리 초기화
- 27. 개체 수정 추적을 구현하는 방법
- 28. 수정 기존의 WCF 통신 개체
- 29. Python : 절인 된 개체 수정
- 30. 팩토리 함수에서 불변 개체 수정
감사합니다. '이 기능은 일반적으로 전용 멤버 변수에만 사용됩니다 .' –
정말 뭐라고 말하고 있는지. 위 예제에서와 같이'public mutable' 멤버 변수가 있다면'const'는 실제로 유용한 정보를 의미하지 않습니다. 왜냐하면 객체의 public 부분이'const' 참조를 통해서도 눈에 띄게 바뀔 수 있기 때문입니다. 반면에 'private mutable'멤버 변수가 이전에 계산 된 결과를 캐쉬처럼 내부적으로 처리하는 경우 객체의 * public * 부분은 시각적으로 동작을 변경하지 않습니다. –