-
C++
에서const char *pci;
와 같은 상수 포인터의 사용은l-value
처리 시 문제가 발생할 수 있으므로 지양해야 합니다. -
또한,
C++
에서는const
함수 내에서 멤버 변수를 수정하기 위해mutable
예약어를 제공합니다.
C++ Gotchas
https://www.amazon.com/Gotchas-Avoiding-Common-Problems-Coding/dp/0321125185
아래는 상수 포인터와 mutable
예약어의 사용을 설명하는 간단한 예제 코드입니다.
-
cpp
#include <iostream> int main() { const char *pci = "Hello, World!"; // 포인터가 가리키는 값은 변경 불가 pci = "New String"; // 포인터 자체는 다른 주소로 변경 가능 std::cout << pci << std::endl; char buffer[] = "Hello!"; char *const cp = buffer; // 포인터 자체는 고정되지만 값은 변경 가능 cp[0] = 'h'; // 값 변경 가능 std::cout << cp << std::endl; return 0; }
-
cpp
#include <iostream> #include <string> class Example { private: std::string data; mutable int accessCount; // const 함수에서도 수정 가능 public: Example(std::string str) : data(str), accessCount(0) {} void display() const { ++accessCount; // mutable을 사용해 const 함수에서 수정 가능 std::cout << "Data: " << data << ", Accessed: " << accessCount << " times\n"; } }; int main() { Example ex("Hello Mutable!"); ex.display(); ex.display(); return 0; }
-
Output
New String hello! Data: Hello Mutable!, Accessed: 1 times Data: Hello Mutable!, Accessed: 2 times
-
이 예제는
const
와mutable
의 주요 개념을 보여줍니다. -
mutable
은const
함수에서 객체의 특정 멤버 변수에 한해 값을 변경할 수 있도록 합니다.
'C C++' 카테고리의 다른 글
C++ 오버로딩 (Overloading on the C++) (0) | 2007.06.14 |
---|---|
현재 윈도우즈 버전 얻기 예제 (0) | 2007.05.19 |
최대한 잘라먹기(Maximal Munch)와 컴파일러(Compiler) (2) | 2007.05.16 |
TTOF2() 함수 (0) | 2007.05.09 |
CMainFrame IDR_MAINFRAME 확장자 연결 문자열 (0) | 2007.04.26 |