본문 바로가기

전체 글332

try catch #include using std::cout;using std::endl; double divide(double d, double v){ if (v == 0) { throw "Dirived by zero"; // 처리 되지 않으면 std::terminate } return d / v;} class Parent {};class Child : public Parent {};class Test{public: ~Test() { cout 2020. 12. 14.
전통적인 예외 처리 #pragma warning(disable: 4996)#include #include using std::cout;using std::endl; int divide(double d, double v, double& result){ if (v == 0) { result = 0; return -1; } result = d / v; return 0;} int errorCode = 0;double divide(double d, double v){ if (v == 0) { errorCode = -1; return 0; } errorCode = 0; return d / v;} int main(){ { // 에러 발생 시 종료 // 비정상 종료 //std::abort(); // 종료 코드를 넣은 종료 //exit(1.. 2020. 12. 14.
C 스타일함수 스타일 변환 #include using std::cout;using std::endl; class Parent{public: Parent() {} explicit Parent(int i) {}}; enum class Type{ A, B, C}; void constCastFunc(int i){ const int& j = i; int& k0 = (int&)j; // const_cast // C스타일 캐스트보다 의도가 명확하다 int& k1 = const_cast(i);} int main(){ // C 스타일 캐스팅 int num0 = (int)Type::A; // 함수형 스타일 캐스팅 int num1 = int(Type::A); // C, 함수형 스타틸 캐스팅은 아래 세 개의 캐스팅을 시행한다 int i = 10; fl.. 2020. 12. 14.
reinterpreter_cast 타입에 상관없이 변환. #include #include using std::cout;using std::endl; union ID{ char chars[10]; int integer;}; int main(){ ID id; id.integer = 10; // 해당 비트 배열을 int로 인식하겠다는 의미 // 사용에 주의 int* p = reinterpret_cast(&id); cout 2020. 12. 11.
dynamic_cast 런타임 시점에 캐스팅을 진행, 성공할 경우 주소값을 반환. 캐스팅에 실패할 경우 nullptr을 반환. #include using std::cout;using std::endl; class Parent{public: virtual ~Parent() {}}; class Child : public Parent{public: void func() { cout 2020. 12. 11.
const_cast const의 성향을 제거해 주는 캐스팅. 원본의 const는 제거할 수 없음. #include #include "String.h" using std::cout; using std::endl; int volotileFunc() { // volatile 컴파일 타임 최적화를 하지 않겠다. // 매번 메모리에서 읽어서 사용하겠다. volatile int i = 0; i++; i++; i++; return i; } void func(const int& i) { int& j = const_cast(i); // 상수성을 제거해준다. j = 10; } int main() { int i = 0; func(i); cout 2020. 12. 11.