C/C++가 변 매개 변수 함수 의 실현

1.길 어 지 는 매개 변수 함수
헤더 파일:\#include
함수 선언

int add(int count, ...); 
함수 정의

int add(int count, ...)
{
 va_list va;
 va_start(va, count);
 int sum = 0;
 for (int i = 0; i < count; i++)
 sum += va_arg(va, int);
 va_end(va);
 return sum;
}
함수 호출

int main()
{
 
 cout<<add(5, 1, 2, 3, 4, 5)<<endl;//  15
 return 0;
}
2.C++11 의 새로운 기능 으로 매개 변수 템 플 릿 이 길 어 집 니 다.
변 장 매개 변수 템 플 릿 은 템 플 릿 의 재 귀적 전개 모델 에 해당 하지만 재 귀적 이지 않 습 니 다.사용 할 때'귀속'의 출구 를 정의 한 다음 에 일련의 조작 을 정의 해 야 한다.조작 은'귀속'의 방식 으로 진행 된다.
재 귀 함수 방식 이 전개 되 고 템 플 릿 이 유도 할 때 한 층 씩 재 귀 하여 전개 되 며 마지막 으로 매개 변수 가 없 을 때 정 의 된 일반 함수 로 종 료 됩 니 다.

void test()
 {
 cout << "test()" << endl;
 }

 template < class T, class... Args>
 void test(T first, Args... args)
 {
   cout << typeid(T).name() << " " << first <<endl;
   test(args...);
 }
test<int, int, long>(1, 2, 3L);
//  
int 1
int 2
long 3
test()
응?첫 번 째 test()는 test 함수 재 귀적 호출 의 끝 이 어야 합 니 다.다시 한 번 테스트 해 보 겠 습 니 다.

template < class T>
 void test(const T &t)
 {
 cout << "test()"<<t << endl;
 }

 template < class T, class... Args>
 void test(T first, Args... args)
 {
   cout << typeid(T).name() << " " << first <<endl;
   test(args...);
 }
 //  
int 1
int 2
test()3
이..첫 번 째 테스트 를 통 해 어디서 끝 나 는 지 제어 하 는 것 같 습 니 다.
마지막 으로 올 바른 누적 기 를 쓰 십시오.

#include <iostream>
#include <stdarg.h>
using namespace std;
template<typename T>
int add(const T& t)
{
 return t;
}
template<typename T, typename ...Args>
int add(const T& t, const Args&... args) 
{
 return t + add(args...);
}

int main() {
 auto res = add(2, 3, 3);
 std::cout << res << std::endl;
 system("pause");
 return 0;
}
//     8
참고
가 변 매개 변수 템 플 릿,오른쪽 값 인용 과 완벽 한 퍼 가기 에 관 한 내용 은 이 블 로 그 를 참고 할 수 있 습 니 다https://www.jb51.net/article/95152.htm시간 이 있 으 면 다음 에 어떻게 하 는 지 다시 연구 해 보 세 요.
C/C++가 변 매개 변수 함수 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C/C+가 변 매개 변수 함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기