일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- resource management class
- reference
- 다형성
- more effective c++
- 스마트 포인터
- 참조자
- 언리얼
- 티스토리챌린지
- Smart Pointer
- effective stl
- 루아
- Vector
- 오블완
- 영화
- 비교 함수 객체
- 영화 리뷰
- operator new
- implicit conversion
- 반복자
- 게임
- virtual function
- 암시적 변환
- lua
- c++
- 상속
- 메타테이블
- UE4
- Effective c++
- exception
- 예외
- Today
- Total
목록암시적 변환 (5)
스토리텔링 개발자
항목 21 : 오버로딩은 불필요한 암시적 타입 변환을 막는 한 방법이다. 암시적 변환// Unlimited Precision Integerclass UPInt{public: UPInt(); UPInt(int value); ...};const UPInt operator+(const UPInt& lhs, const UPInt& rhs);// 일반적인 사용법UPInt upi1, upi2;...UPInt upi3 = upi1 + upi2;// 이렇게 사용하게 된다면?upi3 = upi1 + 10;upi3 = 10 + upi2;UPInt는 int를 생성자로 받아들이기 때문에 암시적 변환이 일어나 UPInt 타입을 임시 객체로 생성한다.하지만, 임시 객체는 리소스의 낭비이다.사실 이 코드의 목적..
항목 19 : 임시 객체의 원류를 정확히 이해하자. 임시 객체(temporaries)아래의 경우를 임시 객체라 할 수 있을까?templcatevoid swap(T& object1, T& object2){ T temp = object1; // 임시 객체? 아니고 그저 지역 객체 object1 = object2; object2 = temp;}그렇다면 임시 객체란 무엇일까?C++에서의 진짜 임시 객체는 힙 이외의 공간에 생성되는 ‘이름 없는’ 객체이다.즉, 코드 상에서는 드러나지 않는다.이름 없는 객체가 만들어지는 상황함수 호출의 매개변수로 암시적 타입 변환이 적용될 때함수가 객체를 값으로 반환할 때임시 객체의 생성, 소멸 비용은 전체 성능에 의외로 꽤 영향을 준다. 함수 호출의 매개변..
항목 5. 사용자 정의 타입 변환 함수에 대한 주의를 놓지 말자 암시적 변환C처럼 C++ 역시 암시적 변환을 지원한다.예컨대 char -> int, short -> double 로 군소리 없이 변환시켜 준다.심지어 int -> short, double -> char 처럼 데이터 손상 여지가 있는 변환도 지원한다.raw 타입에 대해선 어쩔 수 없지만, 커스텀 타입에 대해서는 이 암시적 변환을 확실히 제어할 수 있다.암시적 타입 변환을 위해 컴파일러가 사용할 수 있는 함수를 제공하면 된다. 암시적 타입 변환 함수의 종류 1. 단일 인자 생성자(single-argument constructor)인자를 하나만 받아 호출하는 생성자를 말한다.하나의 매개변수만 받도록 선언.혹은 여러 매개변수이나, 처음 것을..
항목 45. “호환되는 모든 타입”을 받아들이는데는 멤버 함수 템플릿이 직방! 포인터의 암시적 변환(implicit conversion)스마트 포인터로는 대신할 수 없는 포인터의 특징이다.// 포인터의 경우class Top { ... };class Middle : public Top { ... };class Bottom : public Middle { ... };Top* pt1 = new Middle; // Middle* -> Top* 암시적 변환Top* pt2 = new Bottom; // Bottom* -> Top* 암시적 변환const Top* pct2 = pt1; // Top* -> const Top* 암시적 변환// 사용자 정의 스마트 포인터의 경우templateclass SmartPtr{p..
항목 24. 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 클래스에서 암시적 타입 변환을 지원하는 것은 일반적으로 안 좋은 생각이다.다만, 숫자 타입은 C++ 기본 암시적 변환과 별반 다르지 않으므로 허용해도 좋을 것이다. 클래스 멤버 함수에서 사칙 연산 구현class Rational // 유리수 클래스{public: Rational(int numerator = 0, int denominator = 1); // explicit을 붙이지 않은 이유는 // int에서 Rational 암시적 변환을 허용하기 위함 int numerator() const; int denominator() const; public: const Rati..