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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
wn42
C++/C++ 기초

[C++] explicit

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을 이용하면, 잘못된 인자 사용으로 인한 문제가 발생하는 경우를 방지할 수 있다.
  •  explicit 
  • 암시적 변환이란?
  • explicit 키워드
'C++/C++ 기초' 카테고리의 다른 글
  • [C++] 오버로딩 (Overloading) - 2. 연산자
  • [C++] mutable
  • [C++] this 포인터
  • [C++] 클래스에서 static 이용하기 (+ const)
wn42
wn42
코딩이랑 이것저것 하는 블로그

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.