함수 호출 연산자: ()
함수 호출은 함수 또는 호출 가능한 개체로 계산되는 식과 함수 호출 연산자, ()
에 따라 형성되는 일종의 postfix-expression
입니다. 개체는 개체에 대한 함수 호출 의미 체계를 제공하는 operator ()
함수를 선언할 수 있습니다.
구문
postfix-expression
:
postfix-expression
(
argument-expression-list
opt)
설명
함수 호출 연산자에 대한 인수는 쉼표로 구분된 식 목록인 argument-expression-list
에서 나옵니다. 이러한 식의 값은 함수에 인수로 전달됩니다. 인수 식 목록은 비워 둘 수 있습니다. C++17 이전에는 함수 식과 인수 식의 계산 순서가 지정되지 않았으며 어떤 순서로든 발생할 수 있습니다. C++17 이상에서는 함수 식이 인수 식이나 기본 인수 앞에 평가됩니다. 인수 식은 확정되지 않은 시퀀스로 계산됩니다.
postfix-expression
(은)는 호출할 함수로 평가됩니다. 다음과 같은 여러 가지 형식을 사용할 수 있습니다.
- 현재 범위 또는 제공된 함수 인수의 범위에 표시되는 함수 식별자
- 함수, 함수 포인터, 호출 가능한 개체 또는 함수에 대한 참조로 계산되는 식입니다.
- 명시적 또는 묵시적 멤버 함수 접근자
- 멤버 함수에 대한 역참조 포인터입니다.
postfix-expression
(은)는 오버로드된 함수 식별자 또는 오버로드된 멤버 함수 접근자일 수 있습니다. 오버로드 확인 규칙은 호출할 실제 함수를 결정합니다. 멤버 함수가 가상인 경우 호출할 함수는 런타임에 결정됩니다.
몇 가지 선언 예제는 다음과 같습니다.
T
형식을 반환하는 함수. 선언 예제:T func( int i );
T
형식을 반환하는 함수의 포인터. 선언 예제:T (*func)( int i );
T
형식을 반환하는 함수의 참조. 선언 예제:T (&func)(int i);
T
형식을 반환하는 멤버 포인터 함수 역참조. 함수 호출 예제:(pObject->*pmf)(); (Object.*pmf)();
예시
다음 예제에서는 3개의 인수로 표준 라이브러리 함수 strcat_s
를 호출합니다.
// expre_Function_Call_Operator.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
// C++ Standard Library name space
using namespace std;
int main()
{
enum
{
sizeOfBuffer = 20
};
char s1[ sizeOfBuffer ] = "Welcome to ";
char s2[ ] = "C++";
strcat_s( s1, sizeOfBuffer, s2 );
cout << s1 << endl;
}
Welcome to C++
함수 호출 결과
함수가 참조 형식으로 선언되지 않는 한 함수 호출은 rvalue로 평가됩니다. 참조 반환 형식이 있는 함수는 lvalues로 평가됩니다. 이러한 함수는 다음과 같이 대입 문의 왼쪽에서 사용할 수 있습니다.
// expre_Function_Call_Results.cpp
// compile with: /EHsc
#include <iostream>
class Point
{
public:
// Define "accessor" functions as
// reference types.
unsigned& x() { return _x; }
unsigned& y() { return _y; }
private:
unsigned _x;
unsigned _y;
};
using namespace std;
int main()
{
Point ThePoint;
ThePoint.x() = 7; // Use x() as an l-value.
unsigned y = ThePoint.y(); // Use y() as an r-value.
// Use x() and y() as r-values.
cout << "x = " << ThePoint.x() << "\n"
<< "y = " << ThePoint.y() << "\n";
}
앞의 코드는 x 및 y좌표를 나타내는 프라이빗 데이터 개체를 포함하는 Point
라고 불리는 클래스를 정의합니다. 이러한 데이터 개체를 수정하고 해당 값을 검색해야 합니다. 이 프로그램은 이러한 클래스를 위한 여러 디자인 중 하나이며, GetX
와 SetX
또는 GetY
와 SetY
함수는 사용할 수 있는 디자인입니다.
클래스 형식, 클래스 형식에 대한 포인터 또는 클래스 형식에 대한 참조를 반환하는 함수는 멤버 선택 연산자에 대한 왼쪽 피연산자로 사용할 수 있습니다. 다음 코드는 유효합니다.
// expre_Function_Results2.cpp
class A {
public:
A() {}
A(int i) {}
int SetA( int i ) {
return (I = i);
}
int GetA() {
return I;
}
private:
int I;
};
A func1() {
A a = 0;
return a;
}
A* func2() {
A *a = new A();
return a;
}
A& func3() {
A *a = new A();
A &b = *a;
return b;
}
int main() {
int iResult = func1().GetA();
func2()->SetA( 3 );
func3().SetA( 7 );
}
함수를 재귀적으로 호출할 수 있습니다. 함수 선언에 대한 자세한 내용은 함수를 참조하세요. 관련 자료는 번역 단위 및 연결에 있습니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기