글

라벨이 explicit인 게시물 표시

C++ explicit 이란?

잡설 회사 코드를 뒤적거리다 explicit 키워드를 봤을때 학부때 명시적 선언이라고 배웠던 기억을 겨우 꺼냈습니다. 다만 중요하게 여기지 않았던 기억이 있어, 그대로 지나치며 한번 정리하자고 생각해두었습니다. 그렇게 기억의 한 구석에 치워두고 확인해볼 생각조차 하지 못했는데, 다시 그 코드를 보았을때 이번에는 정확하게 무엇인지 정리해두어야겠다고하여 이제 정리해둡니다. explicit이 나온 이유? explicit으로 검색했을때 가장 먼저 나온 이야기는 cpp 컴파일러가 자동으로 형변환을 한다는 것입니다.  #include <iostream> #include <string> class Test { private:     int _val; public:     Test(int val) : _val(val) {}     std::string to_string() { return std::to_string(_val); } }; void print(Test test) {     std::cout << test.to_string() << std::endl; } int main(int argc, char* argv[]) {     int val = 1024;     print(val);     return 0; } 컴파일 및 실행 $ g++ -std=c++11 explicit.cpp $ a.out 1024 됩니다! print 함수는 분명히 Test를 받도록 되어있는데 int val을 넘겨줘도 됩니다!  ... 네 몰랐습니다. 경력으로 딱지쳤나봅니다. explicit 여기서는 Test 클래스가 별달리 하는 일이 없지만, 만약 여러가지 일을 한다면 문제가 될 것입니다. 그래서 이런 경우를 방지하기 위해 명시적으로 생성자에 explicit 키워드를 붙...

이 블로그의 인기 게시물

구글 시트에 여러 행 한번에 추가하기

WSL2 Ubuntu 20.04 및 네트워크 설정

우분투 terminator 에서 파일 경로 클릭시 vscode 에서 열기