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;
}
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