static 변수와 const 변수의 차이점은 무엇입니까?
' 정도인지'의 수 요?static
★★★★★★★★★★★★★★★★★」const
★★★★★★★★★★★★?
상수 값은 변경할 수 없습니다.정적 변수는 인스턴스 또는 개체가 아닌 함수 또는 클래스에 존재합니다.
이 두 개념은 상호 배타적이지 않으며 함께 사용할 수 있습니다.
간단한 답변:
A const
일단 설정되면 값을 변경하지 않겠다는 약속입니다.
A static
variable은 객체의 수명이 프로그램의 전체 실행이며 프로그램 시작 전에 객체의 값이 한 번만 초기화됨을 의미합니다.명시적으로 값을 설정하지 않으면 모든 통계 정보가 초기화됩니다.스태틱 초기화 방법 및 타이밍은 지정되지 않았습니다.
는 C99를 했습니다.const
C++면. C++면,static
는 종종 혼란스러운 의미론 때문에 (두 언어 모두에서) 많은 논쟁의 원인이 되어 왔습니다.
C++C++ 에서는, 「C++11」, 「C++0x」, 「C++11」을 합니다.static
키워드는 네임스페이스 범위에서 오브젝트를 선언하기 위해 사용되지 않습니다.이 권고는 다양한 이유로 C++11에서 삭제되었습니다(여기를 참조).
긴 답변: 알고 싶은 것보다 더 많은 키워드가 있습니다(표준에서 바로 참조).
C99
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
/* file scope, static storage, internal linkage */
static int i1; // tentative definition, internal linkage
extern int i1; // tentative definition, internal linkage
int i2; // external linkage, automatic duration (effectively lifetime of program)
int *p = (int []){2, 4}; // unnamed array has static storage
/* effect on string literals */
char *s = "/tmp/fileXXXXXX"; // static storage always, may not be modifiable
char *p = (char []){"/tmp/fileXXXXXX"}; // static, modifiable
const char *cp = (const char []){"/tmp/fileXXXXXX"} // static, non-modifiable
void f(int m)
{
static int vla[ m ]; // err
float w[] = { 0.0/0.0 }; // raises an exception
/* block scope, static storage, no-linkage */
static float x = 0.0/0.0; // does not raise an exception
/* ... */
/* effect on string literals */
char *s = "/tmp/fileXXXXXX"; // static storage always, may not be modifiable
char *p = (char []){"/tmp/fileXXXXXX"}; // automatic storage, modifiable
const char *cp = (const char []){"/tmp/fileXXXXXX"} // automatic storage, non-modifiable
}
inline void bar(void)
{
const static int x = 42; // ok
// Note: Since an inline definition is distinct from the
// corresponding external definition and from any other
// corresponding inline definitions in other translation
// units, all corresponding objects with static storage
// duration are also distinct in each of the definitions
static int y = -42; // error, inline function definition
}
// the last declaration also specifies that the argument
// corresponding to a in any call to f must be a non-null
// pointer to the first of at least three arrays of 5 doubles
void f(double a[static 3][5]);
static void g(void); // internal linkage
C++
짧은 답변에 기재된 것을 제외하고 대부분 동일한 의미를 가집니다.파라미터 .static
s.
extern "C" {
static void f4(); // the name of the function f4 has
// internal linkage (not C language
// linkage) and the function’s type
// has C language linkage.
}
class S {
mutable static int i; // err
mutable static int j; // err
static int k; // ok, all instances share the same member
};
inline void bar(void)
{
const static int x = 42; // ok
static int y = -42; // ok
}
의 C++에는 몇 .static
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★책이나 기준을 보세요.
정적 변수:
- 1회만 초기화되었습니다.
- 정적 변수는 클래스용입니다(개체별이 아닙니다).즉, 메모리는 클래스당 1회만 할당되며 모든 인스턴스가 이를 사용합니다.따라서 한 객체가 값을 수정하면 변경된 값은 다른 객체에도 표시됩니다.(단순한 생각..클래스에 대해 생성된 객체의 수를 확인하려면 정적 변수를 입력하고 ++를 생성자에서 수행할 수 있습니다.
- 다른 함수 호출 간에 값이 유지됩니다.
변수 구성:
- const 변수는 프로그램의 어느 곳에서도 값을 변경하지 않는다는 약속입니다.그렇게 하면 불평할 거예요.
const
#define
, 단, 치, 치, 예, 예, 예:#define myvalue = 2
선언된 값은 컴파일 전에 변수의 이름을 대체합니다.
static
는 변수입니다.값은 변경될 수 있지만 변수가 함수로 선언된 경우에도 프로그램 실행 내내 변수는 유지됩니다.이는 글로벌 변수의 사용 범위가 선언된 블록의 범위이지만 해당 값의 범위는 글로벌한 변수와 동일합니다.
따라서 정적 변수는 한 번만 초기화됩니다.이것은 변수가 함수로 선언된 경우 특히 중요합니다.이는 함수에 대한 첫 번째 호출 시에만 초기화가 이루어지기 때문입니다.
statics의 또 다른 사용법에는 객체가 포함됩니다.객체에 정적 변수를 선언하면 이 값이 객체의 모든 인스턴스에서 동일하다는 효과가 있습니다.따라서 오브젝트 이름을 사용하여 호출할 수 없고 클래스 이름만으로 호출할 수 있습니다.
public class Test
{
public static int test;
}
Test myTestObject=new Test();
myTestObject.test=2;//ERROR
Test.test=2;//Correct
C나 C++와 같은 언어에서는 정적 글로벌 변수를 선언하는 것은 의미가 없지만 함수나 클래스에서는 매우 유용합니다.관리 대상 언어에서는 글로벌 변수의 영향을 받는 유일한 방법은 변수를 스태틱으로 선언하는 것입니다.
상수는 변경할 수 없습니다. 정적 변수는 상수가 할당되는 방법 및 액세스 가능한 위치와 더 관련이 있습니다.
이 사이트를 확인해 주세요.
static is a storage specifier.
const is a type qualifier.
정적 변수는 유형의 모든 인스턴스에서 공통입니다.
상수 변수는 각 유형의 개별 인스턴스에 고유하지만 해당 값은 컴파일 시 알려지고 고정되므로 실행 시 변경할 수 없습니다.
상수와 달리 정적 변수 값은 런타임에 변경할 수 있습니다.
스태틱 변수는 초기값을 한 번만 얻을 수 있습니다., '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아 이런 코드가 있으면static int a=0
샘플 함수에서는 이 코드가 이 함수의 첫 번째 호출에서는 실행되지만 함수의 후속 호출에서는 실행되지 않습니다. 스태틱 변수가 초기값을 1회만 취득하기 때문에 변수(a)는 현재값(예를 들어 현재값 5)을 계속 유지합니다.
상수 변수는 코드 전체에 값 상수를 가집니다.를 들어,를 ""와같이 const int a=5
이 '값은 합니다.
클래스 컨텍스트의 스태틱 변수는 클래스의 모든 인스턴스 간에 공유됩니다.
함수에서는 지속 변수가 유지되므로 예를 들어 함수를 호출한 횟수를 셀 수 있습니다.
함수 또는 클래스 외부에서 사용되는 경우 변수를 특정 파일 내의 코드로만 사용할 수 있으며 다른 곳에서는 사용할 수 없습니다.
그러나 상수 변수는 변경되지 않습니다.const와 static을 함께 사용하는 일반적인 방법은 일종의 상수를 제공하기 위해 클래스 정의 내에서 사용됩니다.
class myClass {
public:
static const int TOTAL_NUMBER = 5;
// some public stuff
private:
// some stuff
};
static은 컴파일 유닛(즉, 단일 C++ 소스 코드 파일)의 로컬을 의미합니다.즉, 글로벌 네임스페이스에 추가되지 않음을 의미합니다.이름이 같고 이름이 경합하지 않는 다른 c++ 소스 코드 파일에 여러 정적 변수를 포함할 수 있습니다.
const는 상수이기 때문에 의미는 변경할 수 없습니다.
Const는 "변경할 수 없음"을 의미합니다.
static은 "스태틱 인스턴스(메모리 내) vs 다이내믹 인스턴스(스택 내)"를 의미합니다.스태틱 변수는 프로그램 기간 동안 존재합니다.다이내믹한 것은 필요에 따라 작성 및 파기됩니다.
변수는 둘 중 하나 또는 둘 다일 수 있습니다.
const는 상수를 의미하며 그 값은 실행 시 명시적으로 변경하는 것이 아니라 컴파일 시 정의됩니다.또한 실행 시 상수의 값은 변경할 수 없습니다.
그러나 정적 변수는 런타임에 초기화 및 변경할 수 있는 변수입니다.단, 스태틱 변수는 프로그램 전체, 즉 프로그램의 수명 동안 또는 동적 할당 방법을 사용하여 메모리에 할당이 해제될 때까지 그 값을 유지한다는 점에서 변수와는 다르다.단, 프로그램 전체 수명 동안 값을 유지하더라도 현재 코드 블록 외부에서는 액세스할 수 없습니다.
정적 변수에 대한 자세한 내용은 여기를 참조하십시오.
상수 변수는 변경할 수 없습니다.정적 변수는 파일에는 비공개이며 프로그램 코드 내에서만 액세스할 수 있으며 다른 사용자는 액세스할 수 없습니다.
static
합니다.단, 변수 범위를 정의합니다.const
는 프로그램 중에 수 합니다.
간단하게 말하면, 메모리는 스태틱에 1회만 할당하고, 항상 1회만 할당하는 것입니다.단, 이 값은 정적 값과 같이 변경될 수 있지만 메모리 영역은 프로그램이 종료될 때까지 동일하게 유지됩니다.
정적인
변수를 클래스 변수로 만들기 위해 사용합니다.선언 중에는 정적 변수를 정의할 필요가 없습니다.
예:
#include <iostream>
class dummy
{
public:
static int dum;
};
int dummy::dum = 0; //This is important for static variable, otherwise you'd get a linking error
int main()
{
dummy d;
d.dum = 1;
std::cout<<"Printing dum from object: "<<d.dum<<std::endl;
std::cout<<"Printing dum from class: "<<dummy::dum<<std::endl;
return 0;
}
인쇄 방법: 객체로부터의 인쇄 덤: 1 클래스로부터의 인쇄 덤: 1
변수 덤은 클래스 변수입니다.오브젝트를 통해 액세스하려고 하면 컴파일러에 어떤 클래스의 변수인지 알립니다.변수를 사용하여 생성된 개체 수를 셀 수 있는 시나리오를 생각해 보십시오.잡음이 도움이 될 거야
컨스턴트
이 변수를 읽기 전용 변수로 만들기 위해 사용합니다.const 변수를 한 번에 정의하고 선언해야 합니다.
위에서 설명한 것과 같은 프로그램에서는 덤도 일정하게 합니다.
class dummy
{
public:
static const int dum; // This would give an error. You need to define it as well
static const int dum = 1; //this is correct
const int dum = 1; //Correct. Just not making it a class variable
};
기본적으로 이렇게 한다고 가정해 봅시다.
int main()
{
dummy d;
d.dum = 1; //Illegal!
std::cout<<"Printing dum from object: "<<d.dum<<std::endl;
std::cout<<"Printing dum from class: "<<dummy::dum<<std::endl;
return 0;
}
스태틱은 쉽게 이해할 수 있지만 c++에서는 const가 엉망이 됩니다.다음 리소스를 통해 더 잘 이해할 수 있습니다.
정적 값은 함수에 존재할 수 있으며 다른 형태로 사용될 수 있으며 프로그램에서 다른 값을 가질 수 있습니다.또한 프로그램 중에 감소 후 값이 변경될 수 있지만 전체 프로그램 동안 일정하게 유지됩니다.
언급URL : https://stackoverflow.com/questions/2216239/what-is-the-difference-between-a-static-and-const-variable
'sourcecode' 카테고리의 다른 글
파일을 python 콘솔에 로드하려면 어떻게 해야 하나요? (0) | 2022.09.04 |
---|---|
2개의 키(키쌍, 값)로 해시맵을 작성하려면 어떻게 해야 합니까? (0) | 2022.09.03 |
Vuex-ORM을 통한 양방향 데이터 바인딩 (0) | 2022.09.03 |
2바이트 어레이를 비교하시겠습니까?(자바) (0) | 2022.09.03 |
java.displaces를 클릭합니다.UnsupportedClassVersionError 지원되지 않는 major.minor 버전 51.0 (0) | 2022.09.03 |