sourcecode

static 변수와 const 변수의 차이점은 무엇입니까?

copyscript 2022. 9. 3. 13:33
반응형

static 변수와 const 변수의 차이점은 무엇입니까?

' 정도인지'의 수 요?static ★★★★★★★★★★★★★★★★★」const★★★★★★★★★★★★?

상수 값은 변경할 수 없습니다.정적 변수는 인스턴스 또는 개체가 아닌 함수 또는 클래스에 존재합니다.

이 두 개념은 상호 배타적이지 않으며 함께 사용할 수 있습니다.

간단한 답변:

A const일단 설정되면 값을 변경하지 않겠다는 약속입니다.

A staticvariable은 객체의 수명이 프로그램의 전체 실행이며 프로그램 시작 전에 객체의 값이 한 번만 초기화됨을 의미합니다.명시적으로 값을 설정하지 않으면 모든 통계 정보가 초기화됩니다.스태틱 초기화 방법 및 타이밍은 지정되지 않았습니다.

는 C99를 했습니다.constC++면. 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++

짧은 답변에 기재된 것을 제외하고 대부분 동일한 의미를 가집니다.파라미터 .statics.

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

반응형