타입변환-1

jinsuk·2023년 10월 23일
0
  • 타입변환 유형 2가지

  • 프로그래머 의도에 따른 분류(명시적,암시적)
  • 아무런 연관관계가 없는 상황에서 암시적이든 명시적이든 거부를 하는 것을 확인할 수 있음, but 문법적으로 예외적으로 처리해 줄 수는 있음


  • 통과는 된다.


  • dog의 레퍼런스라는 문법 자체는 c++관점에서 보면 knight라는 바구니에다가 또다른 별칭을 붙인다는 의미임
  • 하지만 나이트는 개가 아니다 보니 거부를 하는 것을 확인 할 수 있다.
  • 특히 타입변환시리즈인 타입변환 생성자와 타입변환 연산자는 각 타입 변환에서만 적용되지 레퍼런스나 포인터가 개입될 경우에는 아무런 상관이 없음.

  • 명시적으로 도그에 참조로 바꿔주면 신기하게도 통과가 됨을 확인가능하다.
  • 원래 기사였으므로 도그의 참조로 바꿔주게되면 엉뚱하게 메모리를 초과해서 사용하게 되는 문제가 일어남, 왜냐하면 나이트는 인트 하나만 넣어줬는데 도그는 8바이트로 만들어줬으므로 실질적으로 도그의
  • 큐트를 건들이게 되면 건드리면 안되는 메모리를 건드리게되는 끔찍한일이 발생!
  • 하지만 왜 통과가 돼? 사실 참조 타입이라는게 바구니에 또 다른 이름을 짓겠다는 의미, 어셈블리관점에서보면 포인터랑 별 차이가 없음, 따라서 참조를 포인터로 분석해서 포인터라하면 바구니인데 주소값을 갖는 바구니임 따라서 그 주소를 타고가면 무엇이 있느냐를 앞에다가 우리가 넣어주는데 지금은 우리가 개가 있다고 주장을 한셈임.
  • 하지만 포인터의 특성상 주장하는 그것이 진짜로 맞지 않아도 문법적으로 아무런 문제가 없음, 따라서 참조도 마찬가지로 실질적으로 개가 있는게 아니라 하더라도 주소를 타고 가서 개가 있어라는 형식으로 만들어주는 것 자체는 유효하다는 얘기가됨
  • 상속 관계에 있는 클래스 사이에서의 변환

  • 값타입은 원본의미를 최대한 유지하기 위해
  • 참조타입은 말 그대로 포인터와 유사하게 주소값을 다루다 보니까

profile
공부기록용

0개의 댓글

관련 채용 정보