문제

키워드의 의미에 대한 언어간에 차이가 있다고 들었습니다. static, 그러나 나는 이러한 차이점을 통합하는 좋은 목록을 찾지 못했습니다.

다음은 내가 의미에 대해 알고있는 것입니다 static C ++에서 :

  • 함수 내의 로컬 정적 변수의 경우 변수가 시작시 초기화되고 값은 함수 호출에 걸쳐 저장됩니다.
  • 정적 데이터 구성원은 클래스의 모든 사례 중에서 공유됩니다. 다시 말해, 정적 데이터 구성원의 인스턴스는 하나뿐입니다. 정적 데이터 구성원은 파일 범위에서 초기화되어야합니다.
  • 정적 멤버 함수는 정적 멤버에만 액세스 할 수 있습니다.
  • 재귀 코드에서 정적 객체 또는 변수는 코드 블록의 다른 인스턴스에서 동일한 상태를 갖도록 보장됩니다.
  • 파일 범위에 정의 된 정적 객체 및 변수에는 내부 연결 만 있습니다. 다른 파일은이 파일을 사용할 수 없습니다.

의 의미는 어떻게됩니까? static 다른 언어로 변화?

도움이 되었습니까?

해결책


  • 키워드는 객체의 연결 또는 지속 시간 (수명)을 변경할 수 있습니다.
  • 변수는 항상 0으로 초기화됩니다
  • 함수에는 내부 연결이 있습니다.
  • 파일 레벨 범위에서 선언 된 경우 : 변수는 내부 연결 및 정적 지속 시간이 있습니다 (즉, 프로그램 수명 내내 존재합니다)
  • 블록 범위로 선언 된 경우 : 변수는 연결이 없지만 정적 지속 시간이 있습니다.
  • 번역 장치에 동일한 정적 변수의 여러 선언이있을 수 있습니다. 그러나 그것들은 동일해야합니다. EG : 파일 수준 범위 :

int a;        // a has external linkage

static int a; // a now has static linkage
              // same as if you wrote: static int a = 0;

//...

static int b; // static linkage

extern int b; // extern loses its meaning, b still has internal linkage

//...

extern int b; // b has external linkage

static int b; // error

//...

void func() {
  static int x; // automatic linkage, static duration
                // same as if you wrote: static int x = 0;
}

C ++


  • 파일 레벨 범위에서 익명 네임 스페이스를 선호하는 변수와 멤버 모두에 대해 사용법이 더 이상 사용되지 않았습니다. 호환성으로 만 존재합니다
  • 변수는 여전히 기본값이 초기화됩니다 (C에서와 같이).
  • "6.7 정적 저장 시간 (3.7.1) 또는 스레드 스토리지 지속 시간 (3.7.2)을 갖는 모든 로컬 객체의 제로 시작 (8.5)이 다른 초기화가 이루어지기 전에 수행됩니다 [...]."
  • 변수는 a thread_local 지정자 (C ++ 0x에서)
  • 번역 장치에는 정적 정의가 하나만있을 수 있습니다.
  • 멤버 변수/함수는 인스턴스 법적 액세스 구문이 아닌 클래스의 속성임을 의미합니다.
  • 정적 멤버 함수는 정적 멤버 변수 만 액세스 할 수 있습니다. this 그러한 기능에 대한 포인터
  • 그러나 비 정적 멤버는 모든 정적 멤버에 액세스 할 수 있습니다
  • 파일 레벨 객체에는 클래스 범위가있는 클래스 멤버를 제외하고 내부 연결이 있습니다.
  • 클래스 멤버는 클래스 선언에서 또는 클래스 이름 및 범위 해결 연산자를 통해 명시 적으로 외부에서 정의해야합니다.
  • 사용할 수 없습니다 this 정적 방법으로

ActionScript


  • C ++에서와 같은 클래스 방법
  • 사용할 수 없습니다 this 또는 super 정적 방법으로
  • 인스턴스 이름이 아닌 클래스 이름을 통해서만 액세스합니다
  • 상속되지 않았습니다
  • 파생 클래스는 기지의 정적 특성에 액세스 할 수 있습니다.
  • 정적 및 const 키워드로 선언 된 변수는 상수를 선언하는 동시에 초기화해야합니다.

객체 지향 디자인


  • 싱글 톤 디자인 패턴은 많은 사람들에 의해 영광스러운 정적 물체로 간주됩니다.
  • 공장 디자인 패턴에 사용됩니다

다른 많은 것들을 놓쳤을 수도 있습니다.

다른 팁

델파이에서 정적 키워드는 클래스 메소드를 정의하는 데 독점적으로 사용됩니다. 델파이에서 정상 클래스 메소드는 가상으로 선언되고 서브 클래스로 재정의 할 수 있습니다. 또한 델파이는 a 본인 변수는 다음과 유사합니다 이것 다른 언어로 된 포인터. 그러나 클래스 방법에서 본인 인스턴스 대신 메소드가 호출되는 클래스를 가리 킵니다.

클래스 방법을 선언합니다 공전 수단:

  1. 서브 클래스에서는 무시할 수 없습니다
  2. 그것은 없습니다 본인 바늘

이는 정적 클래스 방법이 정의 된 클래스에서 클래스 멤버 만 액세스 할 수있는 반면, 일반 클래스 방법은 파생 클래스에서 재정의 클래스 멤버에 액세스 할 수 있음을 의미합니다.

델파이 문서에는 일반적으로 특징이 변하지 않는 기능 (단어입니까?)에 대한 다른 비공식적 인 사용이 있습니다. 예를 들어 정적 배열 대 동적 배열입니다. 달리 선언하지 않는 한 델파이의 모든 인스턴스 방법은 정적입니다.

vb.net에서 a Static 변수는 C ++ 로컬 정적 변수와 같습니다.

그러나 수업 전체는 없습니다 Static; 사용 Shared 대신에.

C#에는 정적 키워드를 사용할 수있는 3 가지 방법이 있습니다.

  • 클래스 정의에서 클래스는 정적 멤버 만 노출되며 심어질 수 없음을 의미합니다.
  • 클래스 멤버에서는 수업을 시작하지 않고도 회원이 호출 할 수 있음을 의미합니다.
  • 생성자에서 정적 부재가 호출되기 전에 정적 생성자가 모든 것을 호출 함을 의미합니다. (주로 성능 병목 현상이므로 권장되지 않습니다)

도움이 되었기를 바랍니다.

C#에서 그것은 항상 "유형의 인스턴스가 아닌 유형과 관련된"것을 의미합니다.

Python에는 Decorator @staticMethod가 있으며, 클래스 멤버에 적용될 때 인스턴스가 아닌 클래스에서 방법을 사용할 수 있으며 방법에 자동 인수를 전달하지 않습니다. @ClassMethod 데코레이터는 비슷한 기능을 수행하지만 첫 번째 인수로 클래스를 전달하여 훨씬 더 유용합니다.

C에서 정적 플래그는 함수 또는 글로벌 변수가 위치한 파일에 로컬로서 위치합니다.

그것은 다른 언어로 개인과 비슷합니다. SONTA.

함수에있는 경우, 정적 실행 시간에 스택에있는 것이 아니라 이진의 데이터 섹션에서 변수를 정적으로 현상합니다.

VB.NET에서 static은 프로 시저 레벨을 사용하여 변수가 프로 시저의 모든 실행과 연관되어 있음을 의미합니다 (통화에서 통화대로 보존). 그것은 객체 지향 응용 프로그램에서 약간의 사용법입니다.

상대방은 "공유"이므로 메소드 또는 멤버가 유형 레벨임을 의미합니다 (액세스하기 위해 인스턴스가 필요하지 않음).

Wikipedia는 여러 가지 다른 의미를 요약합니다 static:

정적 방법, 정적 변수, 정적 타이핑.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top