2009-05-28 4 views
3

2008 년 6 월 Phoenix SDK (컴파일러 용 도구)를 다운로드했으며 Hello 샘플의 코드를 읽을 때 정말 실종되었습니다.C++ 코드에서 본 적이없는 특수 연산자에 대한 몇 가지 질문

public 
ref class Hello 
{ 
//-------------------------------------------------------------------------- 
// 
// Description: 
// 
// Class Variables. 
// 
// Remarks: 
// 
// A normal compiler would have more flexible means for holding 
// on to all this information, but in our case it's simplest (if 
// somewhat inelegant) if we just keep references to all the 
// structures we'll need to access as classstatic variables. 
// 
//-------------------------------------------------------------------------- 

static Phx::ModuleUnit    ^module; 
static Phx::Targets::Runtimes::Runtime^runtime; 
static Phx::Targets::Architectures::Architecture  ^architecture; 
static Phx::Lifetime     ^lifetime; 
static Phx::Types::Table    ^typeTable; 
static Phx::Symbols::Table    ^symbolTable; 
static Phx::Phases::PhaseConfiguration  ^phaseConfiguration; 

2 질문 : 그 ref 키워드는 무엇입니까? 그 기호는 무엇입니까 ^? 이

보호 뭐하는 :

virtual void 
    Execute 
    (
    Phx::Unit^unit 
) override; 

};

오버라이드도 C++ 키워드입니까? 그것은 내 Visual Studio에서 같은 색깔. 이 프레임 워크로 정말 놀고 싶지만,이 고급 C++은 현재 정말로 장애물입니다. 고맙습니다.

답변

12

표준 C++가 아니며 C++/CLI입니다.

+3

나는 이런 종류의 "향상된 기능"을 막기 위해 Sun이 Microsoft에서 고소 한 이유가 여기에 있다고 생각합니다. – OscarRyz

+0

대체로 말하면 –

+6

개선되지 않았습니다. 이것은 별도의 언어입니다. C++이 아닙니다. Microsoft는 C++이라고 주장하지 않습니다. C++/CLI는 기술적으로 완전히 다른 짐승입니다. – jalf

5

.NET 용 Microsoft 확장 프로그램입니다. 캐럿은 관리 힙에 저장된 객체에 대한 핸들을 나타냅니다. 멋진 설명은 블로그 Bran Bray's을 참조하십시오.

5

일반 C++ 코드가 아닌 .Net 프레임 워크에서 관리되는 코드로 실행되도록 작성된 C++/CLI 코드입니다.

  • REF -이 방법은 겹쳐 -이 변수 관리 인스턴스 핸들
  • 재 - 이것은 클래스 참조 형은, 그것이 관리 힙에 할당되고 가비지
  • 가^수집 될 것이다 기본 클래스 구현
4

이것은 표준 C++의 일부가 아닙니다. 그것은 Managed C++을 대체하기 위해 설계된 마이크로 소프트 언어 사양은 C++/CLI을,이다 :

C++/CLI (공용 언어 인프라가) C에 대한 SUPERSEDE 관리 확장을위한 마이크로 소프트의 언어 사양 ++입니다. 이전 Managed C++ 구문 (이제 은 사용되지 않음)을 단순화하기 위해 완전히 수정되어 Managed C++보다 더 많은 선명도와 코드 가독성을 제공합니다. C++/CLI는 ECMA-372로 Ecma가 표준화 한 입니다. 현재 은 Visual Studio 2005 및 2008 ( 버전에도 포함되어 있음)에서만 사용할 수 있습니다. this question에 롭 워커의 대답에 기재된

캐럿 심볼 포인터의 C++/CLI 당량이다

... 캐럿는 *의 관리 등가 (포인터)이다 C++/CLI의 용어는 '참조 유형'에 대한 '핸들'이라고합니다 (여전히 에는 관리되지 않는 포인터가 있으므로). Microsoft에서 제공하는 overview 을 참조하십시오.

익숙한 "클래스 X"대신 "ref 클래스 X"를 사용하는 방법에 대해서는이 blog post에서 설명합니다.