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