C++에서 포인터와 함께 const 키워드 사용

Jinku Hu 2023년10월12일
  1. const키워드를 사용하여 C++에서 변경 불가능한 객체 표시
  2. C++에서 포인터 유형과 함께const키워드 사용
C++에서 포인터와 함께 const 키워드 사용

이 기사에서는 C++에서 포인터와 함께const키워드를 사용하는 방법을 보여줍니다.

const키워드를 사용하여 C++에서 변경 불가능한 객체 표시

일반적으로const키워드는 주어진 객체가 프로그램 실행 전체에 걸쳐 변경 불가능 함을 지정하는 데 사용됩니다. 상수 값의 이름을 지정하는 방법은 리터럴 값을 직접 지정하는 것과 비교하여 코드베이스를보다 조정 가능하고 유지 관리하기 쉽게 유지하는 데 도움이됩니다. 또한const키워드는 주어진 매개 변수가 읽기 전용임을 나타 내기 위해 함수 인터페이스에서 많이 사용되며 컴파일 시간 오류에 대한 런타임 오류를 완화하는 데 도움이됩니다.

다음 코드 스 니펫에 표시된대로 유형 지정자 앞에 키워드를 포함하여const객체를 선언합니다. 여기에서s1변수가 읽기 전용문자열로 생성되고const개체에 다른 값을 할당 할 수 없음을 알 수 있습니다. 따라서 선언 중에 초기화되어야합니다. const객체를 수정하려고하면 컴파일러 오류가 발생합니다.

#include <iostream>

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

int main() {
  const string s1("Hello");
  string s2("Hello");

  //    s1 += "Joe"; // Error
  s2 += "Joe";

  cout << "s1: " << s1 << endl;
  cout << "s2: " << s2 << endl;

  return EXIT_SUCCESS;
}

출력:

s1: Hello
s2: HelloJoe

C++에서 포인터 유형과 함께const키워드 사용

포인터 객체를 선언 할 때 일반적으로 뾰족한 객체의 유형도 포함합니다. 따라서 선언문의 접두사로const키워드를 하나만 지정하는 것이 까다로워집니다. 따라서 포인터와 뾰족한 객체 자체에 대해 별도의const지정자가 필요합니다.

일반적으로 이러한 지정자의 세 가지 조합이 있습니다. 첫 번째는 포인터와 개체가 모두 수정 불가능한 경우입니다. 포인터를 재 할당 할 수 없지만 객체 자체는 변경할 수있는 두 번째 조합입니다. 마지막으로 포인터는 변경 가능하고 객체는 변경되지 않는 변형이 있습니다.

세 가지 변형은 모두 해당 구문 표기법을 보여주기 위해 다음 코드 스 니펫에서 선언됩니다. 때로는 가장 오른쪽 지정자에서 왼쪽으로 이러한 선언을 읽는 것이 제안되지만*const선언자가 변경 불가능한 포인터를 나타내는 데 사용된다는 것을 기억할 수도 있습니다.

#include <iostream>

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

int main() {
  string s2("Hello");

  const string *const s3 = &s2;  // both are non-mutable
  s3 = &s2;                      // Error
  *s3 = s2;                      // Error

  const string *s4 = &s2;  // only string object is non-mutable
  s4 = s3;
  *s4 = s2;  // Error

  string *const s5 = &s2;  // only pointer is non-mutable
  s5 = s3;                 // Error
  *s5 = s2;

  return EXIT_SUCCESS;
}
작가: 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