[C++] explicit 란?

 C++에서 필수 매개변수가 하나만 있는 생성자는 암시적 변환 함수로 간주되어 매개변수 유형을 클래스 유형으로 변환합니다. 


생성자 Buffer(int size)가 버퍼 크기를 바이트 단위로 사용 하는 버퍼 클래스가 있는 경우 


컴파일러가 자동으로 (int size)를 Buffers 로 바꾸는 것을 원하지 않을 것입니다.


이를 방지하기 위해 explicit키워드를 사용 하여 생성자를 선언합니다 .


class Buffer 

explicit Buffer(int size); 

}


void useBuffer(Buffer& buf);

useBuffer(4); //error.


explicit 키워드를 사용한다면 컴파일 오류가 발생하므로

임시 Buffer객체를 전달 하려면 명시적으로 전달해야 합니다 .


useBuffer(Buffer(4)); // <- 생성자에 맞게 명확하게 사용.


요약

explicit 키워드 없이 사용한다면 사용자가 원치 않은 형변환이 일어나는 등 예기치 않은 버그가 발생할 수 있기 때문에 애매한 상황이라면 explicit 키워드를 사용하여 예방을 해야 한다.


댓글

이 블로그의 인기 게시물

Roblox - Lua script - Basic Variable(기본 변수)

Roblox - Lua script - tables(테이블) (array,hash etc..) #1

Roblox - Lua script - string (문자열 및 문자열 함수) #2