C++의 관리되는 식
업데이트: 2007년 11월
이 항목은 다음 언어에 적용됩니다.
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro 및 Team |
표의 범례:
해당 |
|
해당 없음 |
|
명령은 기본적으로 숨겨져 있습니다. |
관리되는 식 계산기는 Visual C++로 작성된 대부분의 식을 계산합니다. 다음 항목에서는 관련 정보 및 지원되지 않는 일부 식 형식에 대해 설명합니다.
식별자 및 형식
함수 실행
연산자
오버로드된 연산자
문자열
캐스트
개체 비교 및 할당
typeof 및 sizeof 연산자
Boxing
속성 확인
식 계산기는 public, protected, internal 및 private 액세스 한정자를 무시합니다. 예를 들어, 조사식 창에서 private 메서드를 호출할 수 있습니다.
식 계산기는 실행 중인 코드가 안전한지 안전하지 않은지 여부와 상관없이 안전하지 않은 암시적 컨텍스트에서 모든 계산을 수행합니다.
디버거는 자동 확장 규칙을 사용하여 의미 있는 형태로 데이터 형식의 내용을 표시합니다. 필요한 경우 사용자 지정 자동 확장 요소를 추가하여 사용자 지정 데이터 형식을 표시할 수도 있습니다. 자세한 내용은 사용자 지정 데이터 형식의 요소 표시를 참조하십시오.
식별자 및 형식
디버거 식에서는 현재 범위 내에 표시되는 모든 식별자를 사용할 수 있습니다. 예를 들어, 디버거가 magh 함수에서 중단되면 상수, 변수 이름 및 함수 이름을 포함하여 magh 내에 표시되는 모든 식별자를 사용할 수 있습니다.
디버거는 primitive, enum 또는 intrinsic 형식의 모든 변수를 올바르게 표시할 수 있습니다. class 형식 변수의 경우 디버거는 파생된 형식을 기반으로 값을 올바르게 표시합니다. 예를 들어, cat 형식에서 파생된 lion 형식의 leo 개체가 있는 경우 leo.clawlength를 계산하여 lion 형식의 개체에 대한 올바른 값을 얻을 수 있습니다.
기본 형식의 l-value인 모든 왼쪽 식에 새 값을 할당할 수 있습니다. 클래스와 배열 형식에 대한 할당은 지원되지 않습니다.
함수 실행
디버거는 오버로드된 함수를 포함해 함수 계산을 지원합니다. 따라서 다음 식 중 하나를 입력하면 디버거가 올바른 버전의 오버로드된 함수를 호출합니다.
kanga ()
kanga (roo)
디버거에서 함수를 실행하면 실제로는 해당 함수의 코드가 호출되어 실행됩니다. 함수로 인해 메모리가 할당되거나 전역 변수 값이 변경되는 등의 부작용이 발생하는 경우, 디버거에서 해당 함수를 실행하면 프로그램의 상태가 변경되어 예기치 않은 결과가 생성될 수 있습니다.
오버로드된 함수에 중단점을 설정할 때는 함수를 지정하는 방법에 따라 중단점의 위치가 달라집니다. 함수 이름만 지정하면 디버거는 해당 함수 이름의 각 오버로드에 하나의 중단점을 설정합니다. 전체 시그니처(함수 이름과 전체 인수 목록)를 지정하는 경우 디버거는 지정된 오버로드에 하나의 중단점을 설정합니다.
연산자
디버거는 다음과 같은 대부분의 기본 제공 연산자를 올바르게 계산합니다.
관계형 연산자: (expr1 >expr2, expr1 < expr2, expr1 <= expr2, expr1 => expr2, expr1 == expr2, expr1 != expr2)
부울 연산자: (expr1 && expr2, expr1 || expr2)
조건 연산자: (expr1 ? expr2 : expr3)
산술 연산자: ( expr1 + expr2, expr1 - expr2,expr1 * expr2, expr1 / expr2, expr1 % expr2)
비트 연산자: (expr1 & expr2, expr1 ^ expr2, expr1 | expr2, expr1 ~ expr2)
시프트 연산자. 예: (expr1 >> expr2, expr1 << expr2, expr1 >>> expr2)
할당 연산자: (lvalue = expr2, lvalue *= expr2, lvalue /= expr2, lvalue %= expr2, lvalue += expr2, lvalue -= expr2, lvalue <<= expr2, lvalue >>=expr2, lvalue &= expr2, lvalue ^= expr2, lvalue |= expr2)
단항 연산자. 예: (+ expr1, - expr1, expr1++, ++ expr1, expr1--, -- expr1)
쉼표 연산자를 사용하여 expr1, expr2,expr3과 같은 일련의 식을 입력할 수 있습니다.
오버로드된 연산자
디버거에서는 대부분의 오버로드된 연산자를 처리할 수 있습니다.
사용할 수 있는 오버로드된 중위 연산자: +, -, /, %, &
expr1 + expr2
expr1expr2
expr1 / expr2
expr1 % expr2
expr1 & expr2
사용할 수 없는 오버로드된 중위 연산자: =, &&, &, ||, |, ^
expr1 = expr2
expr1 && expr2
expr1 & expr2
expr1 || expr2
expr1 | expr2
expr1 ^ expr2
C++에서 사용할 수 없는 오버로드된 관계형 연산자: ==, !=, >, <, >=, <=
expr1 == expr2
expr1 != expr2
expr1 > expr2
expr1 < expr2
expr1 >= expr2
expr1 <= expr2
사용할 수 없는 오버로드된 중위 연산자: |, ^, <<, >>, >, <, >=, <=
expr1 | expr2
expr1 ^ expr2
expr1 << expr2
expr1 >> expr2
expr1 > expr2
expr1 < expr2
expr1 >= expr2
expr1 <= expr2
사용할 수 있는 오버로드된 전위 연산자: +, -, ++, --, !, ~
+ expr1
- expr1
++ expr1
-- expr1
! expr1
~ expr1
사용할 수 있는 오버로드된 후위 연산자: ++, --
expr1++
expr1--
기타 사용할 수 있는 오버로드된 연산자: []
- x[expr2]
다차원 배열
C++ 식 계산기에서는 다차원 배열에 대해 C# 스타일 구문을 사용합니다. 예를 들면 다음과 같습니다.
c[0,0]
일반적인 C++ 구문을 사용하면 오류가 발생합니다.
c[0][0] 오류: '0' 인덱스가 'c' 포인터/배열에 대해 범위를 벗어났습니다.
문자열
디버거에서는 인덱싱된 연산자가 배열뿐만 아니라 문자열과 함께 사용될 때도 인덱싱된 연산자를 인식합니다. 따라서 다음과 같이 입력할 수 있습니다.
"hello world"[0]
조사식 창에는 다음과 같이 올바른 값이 표시됩니다.
'h'
캐스트
디버거에서는 다음과 같이 간단한 캐스트 식을 사용할 수 있습니다.
(A)x
그러나 디버거에서 포인터와 관련된 캐스트는 사용할 수 없습니다.
Visual C++의 경우 디버거에서 사용자 정의 캐스트를 사용할 수 없습니다.
개체 비교 및 할당
그러나 Visual C++의 경우 디버거에서 개체 비교와 할당을 할 수 없습니다.
typeof 및 sizeof 연산자
디버거는 typeof 및 sizeof 연산자를 동등한 .NET Framework 함수로 변환하여 지원합니다. 즉,
typeof ( expression )
위의 식은 아래와 같이 변환됩니다.
System.Type.GetType(expression )
디버거는 변환된 이 식을 계산합니다.
디버거는 sizeof 연산자를 지원하지 않습니다.
Boxing 및 Unboxing
디버거 식 계산기는 Visual C++에서 boxing 및 unboxing을 지원하지 않습니다. 자세한 내용은 Boxing 및 Unboxing을 참조하십시오. boxing을 사용하여 개체로 변환된 정수 변수 i가 있는 경우 디버거는 i를 개체가 아닌 정수로 계산합니다. 따라서 예상치 않은 결과가 발생할 수도 있습니다. boxing이 값에 미치는 영향에 대한 자세한 내용은 Boxing 변환을 참조하십시오.
속성 확인
디버거는 모든 변수 창에서 속성을 확인할 수 있습니다. 그러나 디버거에서 속성을 확인하면 예기치 않은 결과가 발생할 수 있습니다. 실수로 속성을 확인하는 것을 방지하려면 옵션 대화 상자에서 속성 확인 기능을 해제합니다.
웹 메서드
디버거 창에서는 웹 메서드를 호출할 수 없습니다.