Programming | 프로그래밍 언어/EffectiveC++

Modern Cpp에 대해 정리하기 전 프리뷰

gyunnnnnn 2022. 11. 5. 20:35

용어 사용

  • 선언(declaration) : 코드에 사용되는 어떤 대상의 이름과 타입을 컴파일러에게 알려주는 것
std::size_t numDigits(int number); // 함수 선언

extern int x;                      // 객체 선언

class Widget;                      // 클래스 선언

template<typename T>
class GraphNode;                   // 템플릿 선언
  • 시그니처(signature) : 함수의 매개변수 리스트반환 타입
    • 위의 경우 numDigits 함수의 시그니처는 std::size_t(int)
  • 정의(definition) : 선언에서 빠진 구체적인 세부사항을 컴파일러에게 제공하는 것
    • 함수에 대한 정의는 함수에 대한 코드 본문을 제공하는것이다.
    • 클래스에 대한 정의는 클래스의 멤버를 넣어 준 결과이다.
  • 초기화(initialization) : 어떤 객체에 최초의 값을 부여하는 과정
    • 초기화는 생성자에 의해 이루어진다.

explicit

  • 암시적 형변환이 일어나지 않도록 제한하는 키워드
#include <iostream>
class A{
public:
   int num;
   A(int n) : num(n){};
};
void printA(A a){
   std::cout << a.num << std::endl;
}
int main(){
   int n = 26;
   printA(n);
}
  • printA(n) 호출시 형변환이 발생하여 A의 생성자가 호출된다.
  • 예상치 못한 형변환을 막으려면 생성자 앞에 explicit 키워드를 붙여준다.

복사 생성자, 복사 대입 연산자

class Base{
public:
   Base(); // 기본 생성자
   Base(const Base& rhs); // 복사 생성자
   Base& operator=(const Base& rhs); // 복사 대입 연산자
}
  • 복사 생성자는 어떤 객체의 초기화를 위해 같은 타입의 객체로부터 초기화할 때 호출되는 함수이다.
  • 복사 대입 연산자는 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수이다.