wn42
코딩이랑 이것저것
wn42
전체 방문자
오늘
어제
  • 분류 전체보기 (113)
    • 프로그래머스 (23)
      • LV1 (11)
      • LV2 (1)
      • LV3 (3)
      • 연습 (8)
    • 딥러닝 공부 (0)
      • 머신러닝&딥러닝 이론 (0)
    • 임베디드 (17)
      • Adventure Design (1)
      • 센서기반모바일로봇 (5)
      • ROS (9)
      • Google Coral (2)
    • C++ (38)
      • C++ 기초 (34)
      • 자료구조 및 알고리즘 (4)
    • Python (14)
      • 기본 파이썬 문법 (6)
      • Python 기초 (8)
    • 빅데이터 (9)
      • 빅데이터 첫걸음 시작하기(국비지원) (5)
      • 빅데이터 공부 (4)
    • 알고리즘 공부 (2)
      • 기본 알고리즘 (2)
    • 전자공학 (10)
      • 반도체 공정 (3)
      • 무선데이터통신 (7)
      • 반도체공학 (0)
    • C# (0)
      • C# 기본 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 조건문
  • 클래스
  • 데이터분석 인강
  • ROS
  • K디지털크레딧
  • 반복문
  • 빅데이터
  • Queue
  • stl
  • 정렬
  • 큐
  • 패스트캠퍼스
  • 변수
  • numpy
  • 스택
  • 스택/큐
  • 딥러닝
  • 노드
  • 소멸자
  • 상속
  • 빅데이터 첫걸음 시작하기
  • 바이트디그리
  • 내일배움카드
  • 인스턴스
  • Python
  • 파이썬
  • google coral
  • 프로그래머스
  • c++
  • 데이터분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
wn42

코딩이랑 이것저것

C++/C++ 기초

[C++] explicit

2023. 1. 10. 14:36

 explicit 

C++ 컴파일러가 암시적으로 형변환을 일으키지 않도록 하는 키워드

 

암시적 변환이란?

  • 암시적 변환(implicit conversion)을 예제를 통해 알아보자
#include <iostream>
#include <string>
using namespace std;

class MyString {
	char* strings;
	int strLen;

public:
	void printstr();
	
	// 문자열 생성
	MyString(const char* str);

	// 복사 생성자
	MyString(const MyString& str);

	~MyString();
};

MyString::MyString(const char* str) {
	strLen = strlen(str);
	strings = new char[strLen];
	for (int i = 0; i != strLen; i++) {
		strings[i] = str[i];
	}
}

MyString::MyString(const MyString& str) {
	strLen = str.strLen;
	strings = new char[strLen];
	for (int i = 0; i != strLen; i++) {
		strings[i] = str.strings[i];
	}
}

MyString::~MyString() { 
	cout << "객체가 소멸되었습니다. " << endl;
	delete[] strings;
}

void MyString::printstr() {
	for (int i = 0; i < strLen; i++) {
		cout << strings[i];
	}
	cout << endl;
}

void printstr(MyString s) {
	s.printstr();
}

int main() {
	printstr(MyString("mystrings"));
	printstr("mystrigns");	// 암시적 변환 -> MyString("mystrings")와 동일
	return 0;
}
mystrings
객체가 소멸되었습니다.
mystrigns
객체가 소멸되었습니다.
  • 위 예제는 문자열을 출력하는 코드이며, printstr 함수는 인자로 MyString 객체를 전달받는다.
  • main 함수에서 MyString 타입임을 명시하지 않았음에도 C++ 컴파일러는 "mystrings"를 MyString("mystrings")로 변환하여 객체를 생성하였다.
  • 위와 같은 암시적 변환을 통해 코드를 편하게 작성할 수 있지만, 어떤 경우에서는 명시하지 않음으로써 치명적인 오류가 일어날 수도 있다.

 

explicit 키워드

  • explicit ▶ 명시적
  • explicit 키워드를 이용하여 컴파일러에게 암시적 변환을 사용할 수 없도록 알려줄 수 있다.
  • 단순하게 함수 앞에 explicit 키워드를 적으면 된다.
explicit MyString(const char* str);

  • 이전과 달리, 명확하게 인자의 타입을 적어주지 않으면 오류가 발생한다.
  • explicit을 이용하면, 잘못된 인자 사용으로 인한 문제가 발생하는 경우를 방지할 수 있다.
    'C++/C++ 기초' 카테고리의 다른 글
    • [C++] 오버로딩 (Overloading) - 2. 연산자
    • [C++] mutable
    • [C++] this 포인터
    • [C++] 클래스에서 static 이용하기 (+ const)
    wn42
    wn42
    코딩이랑 이것저것 하는 블로그

    티스토리툴바