C++에서 포인터에 한정자 사용

Jinku Hu 2023년10월12일
  1. const type var 표기법을 사용하여 C++에서 읽기 전용 개체 선언
  2. 포인터와 함께const 한정자를 사용하여 C++에서 읽기 전용 개체 처리
C++에서 포인터에 한정자 사용

이 기사는 C++에서 포인터와 함께const 한정자를 사용하는 방법에 대한 여러 방법을 보여줍니다.

const type var 표기법을 사용하여 C++에서 읽기 전용 개체 선언

C++는 읽기 전용 (불변)으로 정의해야하는 객체의 한정자로 const키워드를 제공합니다. const 변수는const type var 또는type const var 표기법으로 선언되며, 둘 다 구문 상 정확하지만 전자는 기존 스타일로 사용됩니다. const 한정된 객체는 변경할 수 없으므로 선언 중에 초기화되어야합니다. 이렇게하면const int number;문이 만들어집니다.-유효하지 않고 컴파일러 오류가 발생합니다 (아마도 IDE에서도 비명을 지 릅니다).

const변수가 초기화되면 런타임 중에 다른 값을 할당 할 수 없습니다. 따라서 다음 예제의main 함수에서 세 번째 줄은 유효하지 않으며 컴파일러에서 처리하지 않습니다. 동일한 유형의 변수에 대한 포인터를 선언 한 다음 const변수의 주소를 할당하려고하면 컴파일러에서 오류를보고합니다. 후자의 오류는 보통-fpermissive 플래그로 컴파일하면 무시됩니다.

#include <iostream>

int main() {
  const int number = 1234;

  number = 235;        // Error
  int *ptr = &number;  // Error

  return 0;
}

포인터와 함께const 한정자를 사용하여 C++에서 읽기 전용 개체 처리

const 한정자는 종종 포인터와 함께 사용됩니다. const type * var, type * const varconst type * const var의 세 가지 유형의 선언이 있습니다. 첫 번째는 읽기 전용type 객체에 대한var 포인터를 선언합니다. 이는 객체를 수정할 수 없지만 포인터 자체는 수정할 수 있음을 의미합니다. 두 번째-type 객체에 대한 읽기 전용 포인터로, 여기서 고유 한 것으로 선언하고 수정할 수있는 객체에 대한 불변 포인터이며 마지막 하나는 포인터와 객체를 모두 불변으로 정의합니다.

이러한 표기법은 다음 코드 샘플에서 살펴볼 여러 유용한 기능을 제공합니다. 마지막 예에서 볼 수 있듯이 상수가 아닌 포인터에const 변수의 주소를 저장할 수 없지만 const 지정자를 추가하면 연산이 유효합니다. 하지만 우리는 여전히main 루프의 4 번째 줄에서 보여준 것처럼 새로 선언 된 포인터를 통해 저장된 값을 수정할 수 없습니다.

#include <iostream>

using std::cout;
using std::endl;

#define STR(num) #num

int main() {
  const int number = 1234;

  const int *c_ptr = &number;
  //    *c_ptr = 42; // Error

  cout << STR(number) << " - " << number << endl;
  cout << STR(*c_ptr) << " - " << *c_ptr << endl;

  return 0;
}

출력:

number - 1234
*c_ptr - 1234

포인터와 함께const 한정자를 사용하는 동안 또 다른 일반적인 문제는 읽기 전용 개체를 가리키는 포인터에 대한 비 상수 포인터 할당입니다. 다음 코드 예제에서 초기화 된 상수가 아닌 변수 number2가 새로 추가되었으며 const개체에 대한 포인터로 선언 된 c_ptr에 이제 number2주소가 할당됩니다. 이 연산은 C++에서 합법적이며 결과적으로c_ptr을 통해number2 변수에 저장된 값만 읽을 수 있지만 수정하면 컴파일러 오류가 발생합니다.

#include <iostream>

using std::cout;
using std::endl;

#define STR(num) #num

int main() {
  const int number = 1234;
  const int *c_ptr = &number;

  int number2 = 3456;
  c_ptr = &number2;
  //    *c_ptr += 12; // Error
  number2 += 12;

  cout << STR(number) << " - " << number2 << endl;
  cout << STR(*c_ptr) << " - " << *c_ptr << endl;

  return 0;
}

출력:

number2 - 3468
*c_ptr - 3468
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Const

관련 문장 - C++ Pointer