minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • AI배워야하나
  • 구조체배열포인터
  • API문서정리
  • 이것이C++이다책참고
  • 이차원구조체배열포인터
  • kafka구축
  • 19년식그램SSD장착
  • 리눅스파티션
  • 그램업그레이드
  • OpenGL회전
  • 인공지능개발자
  • hello테마
  • 19년식그램램장착
  • 그램풀스팩업그레이드
  • 티스토리폰트배경색없애기
  • mfc
  • GSLB
  • SpringBootSwagger
  • NextJSSwagger
  • 구조체매개변수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 디폴트 매개변수

2023. 9. 5. 14:50

디폴트 매개변수

  • 함수의 매개변수에 초깃값을 기술 할 수 있다. 
int TestFunc(int nParam=10){  //디폴트 매개변수 사용. TestFunc(), TestFunc(12) 둘다 호출가능
    return nParam;
}
  • 매개변수의 디폴트 값을 선언한 함수는 호출자 코드에서 실인수를 생략한 채 호출할 수 있다.
  • 이러한 특성 때문에 C++에서는 절대로 호출자의 코드만 보고 함수 원형을 확정하면 안된다!
  • 호출할 때 함수 매개변수의 왼쪽부터 짝을 맞춘다. 짝이 맞지 않으면 매개변수의 디폴트값을 적용한다.
  • 디폴트 매개변수는 반드시 오른쪽 매개변수부터 기술해야한다. 디폴트 매개변수 사이에 디폴트 매개변수가 아닌 것이 있을 수 없다.

 

사용 예

#include "stdafx.h"
#include <iostream>

int TestFunc(int nParam1, int nParam2 = 2){
    return nParam1 * nParam2;
}

int main(){
    std::cout << TestFunc(10) << std::endl;        // nParam1에 10
    std::cout << TestFunc(10,5) << std::endl;      // nParam1에 10, nParam2에 5 대입
}

 

 

디폴트 매개변수를 사용하는 일은 자제하는 것이 좋다.

  • 호출자 코드만 봐서는 함수 원형을 알아내기란 불가능해, 모호성이 있기 때문
  • 디폴트 매개변수를 사용하는 것이 좋을 때도 있긴하다. "함수를 만든 사람(A)과 사용자(B)가 서로 다를경우"
디폴트 매개변수를 사용하는 것이 좋은 경우

1.  A가 TestFun(int a, int b)를 만들어서 A코드에서 TestFun(10,5)를 호출했다.

2.  나중에 B가 TestFun함수에 값 하나를 더 넘기고 싶어서 함수에 매개변수 c를 추가했다. 
    TestFun(int a, int b, int c)로 함수를 수정하고 B는 자신의 코드에서 TestFun(10, 5, 100)을 호출했다.

3.  여기서 문제가 발생했다. A의 코드에서  잘돌아가던 TestFun(10, 5)가 오류가 발생하게 된다.

4.  해결방법은 A의 코드에서 오류가 나지 않게 하기 위해서는 디폴트 매개변수를 사용하는 것이다. 그래서 B는 세번째 매개변수에 디폴트 값을 설정한 후 세개의 매개변수를 사용하기로 했다. 
      B가 수정한 코드 : int TestFun(int a, int b, int c = 100)

5.  함수를 만든 A도 원래 코드인 TestFun(10,5)로 사용할 수 있게 되었다.

위 예제는 디폴트 매개변수를 사용하여 현재(B의 코드)와 과거(A의 코드) 모두에 적합한 함수 원형이 될 수 있게 되었다. 이와 같은 경우를 제외하고 디폴트 매개변수를 사용하는 일은 신중해야한다.

 

 

개발자 유의 사항

실력있는 개발자는 '미래'의 유지보수 문제에 대응할 수 있도록 '현재'코드를 작성할 줄 알아야한다. 
C++같은 객체지향 언어는 '객체'라는 대상에 한 제작자(혹은 작성자)와 사용자가 다른 사람인 경우가 많으므로 실제 함수를 사용할 사용자를 고려해 코드를 작성하는 습관을 갖는 것이 중요하다.

 

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

 

 

 

'◼️C++' 카테고리의 다른 글

[C++] 인라인 함수  (0) 2023.09.05
[C++] 함수다중정의(오버로딩), 템플릿 함수  (0) 2023.09.05
[C++] 소숫점 아랫자리 버리기. 정확하지 않은 실수 연산 해결하기  (0) 2023.09.04
[C++] 범위 기반 for 문 for(auto n : nList)  (0) 2023.08.31
[C++] 참조자 형식 int &n = a;  (0) 2023.08.31

    티스토리툴바