static const
과 의 차이점은 무엇입니까 const
? 예를 들면 :
static const int a=5;
const int i=5;
그들 사이에 어떤 차이가 있습니까? 언제 다른 것을 사용 하시겠습니까?
답변:
차이점은 연결입니다.
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
경우 i
객체가 정의 된 변환 단위 외부에서 사용하지 않는, 당신은 그것을 선언해야 static
지정.
이를 통해 컴파일러는 (잠재적으로) 추가 최적화를 수행하고 객체가 번역 단위 외부에서 사용되지 않음을 독자에게 알립니다.
const int i = 5;
외부 연결 이 확실합니까 ?? C ++에서는 그렇지 않습니다 ...
const
는 C ++와 관련이 없습니다 const
.
const int i = 5;
i가 정의되고 로컬로 선언 된 경우 포인터를 사용하여 수정할 수있는 i 값 const int a = 5; 또는 const int i = 5; 전역 적으로는 데이터 세그먼트의 RO 메모리에 저장되므로 수정할 수 없습니다.
#include <stdio.h>
//const int a=10; /* can not modify */
int main(void) {
// your code goes here
//static const int const a=10; /* can not modify */
const int a=10;
int *const ptr=&a;
*ptr=18;
printf("The val a is %d",a);
return 0;
}
이러한 정의가 함수 내부에 있는지 여부에 따라 다릅니다. 함수 밖의 경우에 대한 답은 위의 ouah에 의해 제공됩니다. 함수 내부 에서 효과는 다릅니다. 아래 예에서 볼 수 있습니다.
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
지역 변수가 "정말 상수"가 되려면 "const"뿐만 아니라 "static const"를 정의해야합니다.
foo
가변 재 초기화마다가 my_function()
할당되는 임의의 다른 값의 결과라고한다. bar
한 번만 초기화 된 변수 의 경우 처음으로 my_function()
호출되어 프로그램 수명 동안 동일한 값이 할당됩니다. 따라서 정적 저장 기간.
bar
가 rand()
아니기 때문에 할당에 대한 컴파일 오류가 발생합니다 .