다음을 통해 공유


매개 변수 배열 및 가변 매개 변수(...)

업데이트: 2007년 11월

Visual C++ 2008에서는 오버로드된 함수 호출을 해결하기 위한 매개 변수 배열의 우선 순위가 Managed Extensions for C++와 다르게 변경되었습니다.

Managed Extensions와 새 구문 모두 C# 및 Visual Basic이 지원하는 매개 변수 배열을 명시적으로 지원하지 않습니다. 대신 다음과 같이 특성을 사용하여 일반 배열을 플래그 지정합니다.

void Trace1( String* format, [ParamArray]Object* args[] );
void Trace2( String* format, Object* args[] );

이 둘은 모두 동일하게 보이지만 ParamArray 특성은 C# 또는 기타 CLR 언어에 대해 이 배열을 각 호출마다 요소의 변수 번호를 가져오는 배열로 지정합니다. Managed Extensions와 새 구문으로 작성된 프로그램에서 동작의 차이는 Artur Laksberg가 제공한 다음 예제에서와 같이 한 인스턴스가 가변 매개 변수(...)를 선언하고 두 번째 인스턴스가 ParamArray 특성을 선언하는 오버로드된 함수 집합의 확인 방식에 있습니다.

int foo(...); // 1
int foo( [ParamArray] Int32[] ); // 2

Managed Extensions의 경우 가변 매개 변수(...)의 우선 순위가 특성보다 높습니다. 특성은 이 언어의 형식적인 측면이 아니기 때문입니다. 그러나 새 구문의 경우에는 이제 매개 변수 배열이 언어 내에서 직접 지원되며 가변 매개 변수(...)보다 우선 순위가 높습니다. 매개 변수 배열이 더 강력한 형식이기 때문입니다. 따라서, 아래의 호출은

foo( 1, 2 );

Managed Extensions에서 foo(¢¢ç¦)로 확인되는 반면, 새 구문에서는 ParamArray 인스턴스로 확인됩니다. 거의 있을 법하지 않지만 프로그램 동작이 ParamArray 호출 대신 가변 매개 변수(...) 인스턴스의 호출에 의존하는 경우 시그니처나 호출을 수정해야 합니다.

참고 항목

개념

일반적인 언어 변경 사항