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-id
attribute-specifier-seq
opt
noptr-declarator
parameters-and-qualifiers
noptr-declarator
[
constant-expression
opt]
attribute-specifier-seq
opt
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
opt
ref-qualifier
optnoexcept-specifier
optattribute-specifier-seq
opt
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
optcv-qualifier-seq
opt
&
attribute-specifier-seq
opt
&&
attribute-specifier-seq
opt
nested-name-specifier
*
attribute-specifier-seq
optcv-qualifier-seq
opt
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
opt
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
다음 문서를 참조하세요.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기