c++11 기호 수식 과 함수 서명,함수 포인터,익명 함수,모방 함수,std::function 과 std::bid

1.기호 수식 과 함수 서명
1.기호 수식
컴 파일 러 가 c+소스 코드 를 대상 파일 로 컴 파일 할 때 함수 서명 정보 로 함수 이름 을 개편 하여 수식 명 을 만 듭 니 다.GCC 의 C++기호 수식 방법 은 다음 과 같다.
1)모든 부 호 는시작
2)이름 공간의 이름
이름 공간(또는 클래스)의 이름 앞 에 N 을 추가 합 니 다.
이름 앞 에 또 하나의 숫자 가 있 는데 이름 의 문자 수 입 니 다.예 를 들 어 1C,1 은 C 의 길이 이다.
3)함수 명
이름 공간 과 마찬가지 로 함수 이름 앞 에 도 숫자 가 있 습 니 다.예 를 들 어 4func,4 는 func 의 문자 수 입 니 다.
4)매개 변수
매개 변 수 는 E 로 시작 합 니 다.
예시
N::C::func(int)의 함수 서명 은 로 수식 되 었 습 니 다.ZN1N1C4funcEi
2.함수 서명
함수 서명 구성 부분:함수 명,매개 변수 유형,매개 변수 개수 와 순서,그리고 그 종류 와 네 임 스페이스 를 포함 합 니 다.
상기 모든 부분 이 다 르 면 기호 수식 후의 명사 가 다 를 수 있 습 니 다.즉,함수 서명 이 다 르 기 때문에 서로 다른 함 수 를 구분 할 수 있 고 호출 할 때 오류 가 발생 하지 않 습 니 다.
함수 포인터
예:int(*p)(int,int)
문 구 는 함 수 를 가리 키 는 포인터 변수 P 를 정의 합 니 다.이 함수 포인 터 는 이러한 함 수 를 가리 킬 수 있 습 니 다.즉,반환 값 은 int 형식 이 고 두 개의 int 매개 변수 함수 가 있 습 니 다.포인터 p 의 유형 은 int(*)(int,int)입 니 다.
함수 포인터 의 통일 정의 방식 은:
함수 반환 형식(*포인터 변수 이름)(함수 매개 변수 목록)
간단 한 사용법:
int func(int x); //함수 정의
int (*p)(int x);//함수 포인터 정의
p=func;//함수 func 의 첫 주 소 를 포인터 변수 p 에 할당 합 니 다.
3.c+11 의 익명 함수(lambda 함수,lambda 표현 식)
C++11 은 익명 함수 에 대한 지원 을 제공 합 니 다.lambda 함수(lambda 표현 식 이 되 기도 합 니 다)라 고 합 니 다.형식 은 다음 과 같 습 니 다.
[capture](parameters)->return-type{body}
해석:
capture
1),[]//정의 되 지 않 은 변 수 는 lambda 함수 에서 외부 변 수 를 사용 하 는 것 이 잘못 되 었 습 니 다.
2)、[x,&y]//x 값 에 따라 포획 하고 y 인용 에 따라 포획
3),[&]//사용 하 는 모든 외부 변 수 는 암시 적 으로 참조 에 따라 캡 처 합 니 다.
4),[=]//사용 하 는 모든 외부 변 수 는 암시 적 으로 값 에 따라 캡 처 합 니 다.
5),[&,x]//x 현식 은 값 에 따라 포획 하고,기타 변 수 는 인용 에 따라 포획 한다
6),[=,&z]//z 는 인용 에 따라 포획 하고,기타 변 수 는 값 에 따라 포획 한다
parameters:함수 의 매개 변 수 를 저장 합 니 다.parameters 가 비어 있 을 때()절약 할 수 있 습 니 다.
return-type:함수 의 반환 값 입 니 다.funtion body 에 return 문 구 를 존재 한다 면 이 lambda 표현 식 의 반환 유형 은 return 문장의 반환 형식 에 의 해 확 정 됩 니 다.
body:함수 체
예:
auto fun=[](int x){ return x; }
cout<4.모방 함수
본질:모방 함수 의 본질은 클래스 가 operator()를 다시 불 러 오고 행위 가 유사 한 함수 의 대상 을 만 드 는 것 이다.
예:

template<class T>

stuct plus:public binary_function<T,T,T>{

T operator()(const T &x,const T &y) const{return x-y;}

};

cout<<"plus="<<plus<int>(2,1)<<endl;//  1
5.std::function 과 std::bind 본질
1、std::finction
std::function 은 함수 템 플 릿 클래스(하나의 클래스)입 니 다.std::bind 는 함수 템 플 릿(함수)으로\#include파일 에 포함 되 어 있 습 니 다.
std::function 은 함 수 를 대상 화하 고 함 수 를 하나의 대상 으로 삼 는 다.주요 목적 은 더 많은 범 형 알고리즘 을 보고 함수 로 조작 데 이 터 를 얻 는 코드 를 보고 싶 지 않다 는 것 이다.
std::function 을 통 해 C++의 각종 호출 가능 한 실체(일반 함수,lambda 표현 식,함수 포인터,그리고 다른 함수 대상 등)에 대한 패 키 징 을 통 해 새로운 호출 가능 한 std::function 대상 을 형성 하여 우 리 는 더 이상 호출 가능 한 실 체 를 고민 하지 않 습 니 다.
예:
1),std::functionfunc//std::function 대상 설명
2)、int test(int){return a};//일반 함수
3),auto test=[](int a)->int{return a}/익명 함수
4),class test{//모방 함수

public:
int operator()(int a){
return a;
}
};
5),class test{/클래스 구성원 함수&클래스 정적 함수

public:
int tseta(int a){return a}
static int testb(int a){return a;}
};
//  
//1、    
func=test;
func(1);
//2、    
func=test
func(1);
//3、   
test t;
func=t;
func(1);
//4、     
test t;
func=std::bind(&test::testa, t ,std::placeholder::_1); //std::placeholder::_1 :    
func(1);
//5、       
func=test::testb;
func(1);
2、std::bind
std::bind 는 일반적인 함수 어댑터 로 볼 수 있 습 니 다.호출 가능 한 대상 을 받 아들 여 원 대상 에 적응 할 수 있 는 새로운 호출 가능 한 대상 을 만 듭 니 다.
역할:
1)std::bind 는 호출 가능 한 대상 과 그 매개 변 수 를 모방 함수 로 연결 합 니 다.
2)일부 매개 변수 만 바 인 딩 하여 호출 가능 한 대상 이 들 어 오 는 매개 변 수 를 감소 합 니 다.
예:

//1、      
int test_a(int x,inty){return x+y;}
auto test_A=std::bind(test_a,_1,10);//_1:   
test_A(2);//12
//2、       
struct test_struct{
int test_b(int x,int y){
return x+y;
}
};
test_struct test_tt;
auto test_B=std::bind(&test_struct::test_b,&test_tt,20,30); //              (        ,      ),            (         ),       test_b     
test_B();//50
총결산
c++11 기호 수식 과 함수 서명,함수 포인터,익명 함수,모방 함수,std::function 과 std::bind 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 c+11 기호 수정자 와 함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기