C++의 관리되는 식
관리되는 식 계산기는 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
expr1 expr2
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를 개체가 아닌 정수로 계산합니다. 따라서 예상치 않은 결과가 발생할 수도 있습니다.
속성 확인
디버거는 모든 변수 창에서 속성을 확인할 수 있습니다. 그러나 디버거에서 속성을 확인하면 예기치 않은 바람직하지 않은 결과가 발생할 수 있습니다. 실수로 속성을 확인하는 것을 방지하려면 옵션 대화 상자에서 속성 확인 기능을 해제합니다.
WebMethod
디버거 창에서는 WebMethod를 호출할 수 없습니다.