const(C++)

데이터 선언 const 을 수정할 때 키워드(keyword) 개체 또는 변수를 수정할 수 없음을 지정합니다.

구문

declarator:
ptr-declarator
noptr-declarator parameters-and-qualifiers trailing-return-type
ptr-declarator:
noptr-declarator
ptr-operator ptr-declarator
noptr-declarator:
declarator-idattribute-specifier-seqopt
noptr-declarator parameters-and-qualifiers
noptr-declarator[constant-expressionopt]attribute-specifier-seqopt
( ptr-declarator )
parameters-and-qualifiers:
(parameter-declaration-clause)cv-qualifier-seqopt
ref-qualifieroptnoexcept-specifieroptattribute-specifier-seqopt
trailing-return-type:
-> type-id
ptr-operator:
*attribute-specifier-seqoptcv-qualifier-seqopt
&attribute-specifier-seqopt
&&attribute-specifier-seqopt
nested-name-specifier*attribute-specifier-seqoptcv-qualifier-seqopt
cv-qualifier-seq:
cv-qualifiercv-qualifier-seqopt
cv-qualifier:
const
volatile
ref-qualifier:
&
&&
declarator-id:
...optid-expression

const

const 키워드(keyword) 변수의 값이 상수임을 지정하고 프로그래머가 수정하지 못하도록 컴파일러에 지시합니다.

// constant_values1.cpp
int main() {
   const int i = 5;
   i = 10;   // C3892
   i++;   // C2105
}

C++에서는 전처리기 지시문 대신 #define 키워드(keyword) 사용하여 const 상수 값을 정의할 수 있습니다. 정의된 const 값은 검사 형식이 적용되며 상수 식 대신 사용할 수 있습니다. C++에서는 다음과 같이 변수를 사용하여 배열 const 의 크기를 지정할 수 있습니다.

// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray];  // allowed in C++; not allowed in C

C에서 상수 값은 기본적으로 외부 링크로 설정되므로 소스 파일에만 나타날 수 있습니다. C++에서 상수 값은 기본적으로 내부 링크로 설정되므로 헤더 파일에 나타날 수 있습니다.

const 키워드(keyword) 포인터 선언에도 사용할 수 있습니다.

// constant_values3.cpp
int main() {
   char this_char{'a'}, that_char{'b'};
   char *mybuf = &this_char, *yourbuf = &that_char;
   char *const aptr = mybuf;
   *aptr = 'c';   // OK
   aptr = yourbuf;   // C3892
}

로 선언된 변수에 대한 포인터는 으로 const 선언된 const포인터에만 할당할 수 있습니다.

// constant_values4.cpp
#include <stdio.h>
int main() {
   const char *mybuf = "test";
   char *yourbuf = "test2";
   printf_s("%s\n", mybuf);

   const char *bptr = mybuf;   // Pointer to constant data
   printf_s("%s\n", bptr);

   // *bptr = 'a';   // Error
}

상수 데이터에 대한 포인터를 함수 매개 변수로 사용하여 함수가 포인터를 통해 전달된 매개 변수를 수정하지 못하게 할 수 있습니다.

const선언된 개체의 경우 상수 멤버 함수만 호출할 수 있습니다. 컴파일러는 상수 개체가 수정되지 않도록 합니다.

birthday.getMonth();    // Okay
birthday.setMonth( 4 ); // Error

상수가 아닌 개체에 대해 상수 또는 비 상수 멤버 함수를 호출할 수 있습니다. 키워드(keyword) 사용하여 const 멤버 함수를 오버로드할 수도 있습니다. 이 기능을 사용하면 상수 및 비 상수 개체에 대해 다른 버전의 함수를 호출할 수 있습니다.

키워드(keyword) 사용하여 생성자 또는 소멸자를 선언할 const 수 없습니다.

const 멤버 함수

키워드(keyword) 멤버 함수를 const 선언하면 함수가 호출되는 개체를 수정하지 않는 "읽기 전용" 함수임을 지정합니다. 상수 멤버 함수는 비정적 데이터 멤버를 수정하거나 상수가 아닌 멤버 함수를 호출할 수 없습니다. 상수 멤버 함수를 선언하려면 인수 목록의 닫는 const 괄호 뒤의 키워드(keyword) 배치합니다. const 키워드(keyword) 선언과 정의 모두에 필요합니다.

// constant_member_function.cpp
class Date
{
public:
   Date( int mn, int dy, int yr );
   int getMonth() const;     // A read-only function
   void setMonth( int mn );   // A write function; can't be const
private:
   int month;
};

int Date::getMonth() const
{
   return month;        // Doesn't modify anything
}
void Date::setMonth( int mn )
{
   month = mn;          // Modifies data member
}
int main()
{
   Date MyDate( 7, 4, 1998 );
   const Date BirthDate( 1, 18, 1953 );
   MyDate.setMonth( 4 );    // Okay
   BirthDate.getMonth();    // Okay
   BirthDate.setMonth( 4 ); // C2662 Error
}

C 및 C++ const 차이점

C 소스 코드 파일에서 변수를 정의 const 할 때 다음과 같이 정의합니다.

const int i = 2;

그런 다음 이 변수를 아래와 같이 다른 모듈에서 사용할 수 있습니다.

extern const int i;

그러나 C++에서 동일한 동작을 얻으려면 변수를 다음과 같이 정의 const 해야 합니다.

extern const int i = 2;

C와 마찬가지로 다음과 같이 다른 모듈에서 이 변수를 사용할 수 있습니다.

extern const int i;

C 소스 코드 파일에서 사용할 변수를 C++ 소스 코드 파일에 정의 extern 하려면 다음을 사용합니다.

extern "C" const int x=10;

C++ 컴파일러에 의한 이름 변환을 방지해야 합니다.

설명

멤버 함수의 매개 변수 목록을 const 따르는 경우 키워드(keyword) 함수가 호출되는 개체를 수정하지 않도록 지정합니다.

자세한 내용은 const다음 문서를 참조하세요.

참고 항목

키워드