2011-10-06 4 views
2

:차이 다음 코드 세그먼트에 대하여

struct Pair{ 
    string name; 
    double val; 
} 
vector<Pair> pairs; 
double& value(const string& s) 
{ 
    for (int i=0; i<pairs.size(); i++) 
     if (s==pairs[i].name) return pairs[i].val; 
    Pair p = {s,0}; 
    pairs.push_back(p); 
    return pairs[pairs.size()-1].val; 
} 

저자 상태

주어진 인수 문자열

, 값()은 대응하는 부동 발견 point 객체 (대응하는 부동 소수점 객체의 값이 아님); 그런 다음 참조를 반환합니다.

"부동 소수점 개체"와 그 값의 차이점은 무엇입니까?

답변

5

개체는 값이 들어있는 실제 메모리 블록입니다.

그래서 참조를 얻으면 값을 바꿀 수 있습니다.이 값은 원래 벡터에 저장되어 있습니다.

그리고 방금합니다 (&없이 더블에 반환 값을 변경하여) 값을 얻을 것이라고하면 물론 당신이 벡터에 실제 값을 변경 할 수 없을 것

.

1

double& value(const string& s) < - 여기가 숨겨져 있습니다. & 마크 참조, 변수 값이 아닙니다 (어떤 참조인지 알지 못하는 경우 - const, not-null 포인터와 비슷 함).

0

기능은 value ( 좌변 있는 기술적 용어) 수 (예. 42 또는 3.1415)하지만 가변참조를 반환하지 않는다. 숫자를 저장하는 실제 객체에 액세스 할 수있는 핸들을 반환합니다 (특히 번호를 읽을 수 있음). 심지어 수정할 수도 있습니다. 재치으로

:

value("foo") = 42.314; 

누구 name 필드 "foo"을있는 Pair 객체를 수정합니다.

이제

std::cout << value("foo") << "\n"; 

을 할 경우는 42.314를 인쇄합니다.