2016-08-09 4 views
3
class B { 
}; 

class A { 
    A(B& b):_b(b) 
    B& _b; 
}; 

int main() { 
    B b; 
    A a(b); 
    char* x = reinterpret_cast<char*>(&a); 
}        

개체의 바이트 값을 기반으로 해시 함수를 만듭니다. 객체의 바이트가 b를 보유하고 있는지 또는 참조 (포인터)를 보유하고 있는지를 알고 싶습니까?참조를 메모리에서 처리하는 방법

+0

[C++에 대한 권장 도서 목록] (http://stackoverflow.com/q/388242/253056)을 참조하십시오. –

+0

개체에 바이트 값이 없습니다. 2 개의 다른 바이트 배열이 같은 오브젝트 치를 나타낼 가능성이 있습니다. 참조가 어떻게 표현되는지는 구현에 따라 정의됩니다. –

답변

1

A::_b을 참조로 선언 했으므로 참조를 "보유"합니다. 그러므로 a 개체는 a 바이트 단위로 검사하면 b의 데이터를 포함하지 않습니다.


그런데 캐스팅에서 주소 연산자를 사용하는 것을 잊어 버렸습니다.

+1

... 그러나,'_b' (이름으로)에 대한 모든 접근은 당신이 지시 대상을 접근하고있는 것처럼 보이므로, 이것은 해시 함수에 대해 중요하지 않을 수 있습니다. –

+0

그리고 동일한 refered b 객체에 대해 A의 바이트는 항상 동일 할 것입니까? – mkmostafa

+0

@mkmostafa 이는 컴파일러가 참조를 구현하는 방법에 따라 다릅니다. –

관련 문제