아래 첨자 조작부호가 왜 인용을 되돌려야 하는지 설명하십시오

1273 단어 Systeminterface
커서 조작부호를 다시 불러오는 가장 큰 장점은 대상 내부의 용기에 접근수 그룹 요소처럼 읽기와 쓰기를 할 수 있다는 것이다.

다시 불러온 커서 조작부호가 인용을 되돌려주지 않으면 대상의 내부 상태만 읽을 수 있습니다.

#include <vector>
using std::vector;
#include <iostream>
using std::cout; using std::endl;

class Foo {
public:
Foo(): data(100) { for (int i = 0; i != 100; ++i) data[i] = i; }
    int operator[](const size_t);
    //const int operator[](const size_t) const;
    // other interface members
private:
    vector<int> data;
    // other member data and private utility functions
};

int Foo::operator[](const size_t index)
{
	return data[index];   // no range checking on index
}


int main() {
	
    Foo f;
    cout << f[50] << endl; // cout << f.operator[](50) << endl;
    f[50] = 90;   // f.operator[](50) = 90;
    cout << f[50] << endl;
    system("pause");
    return 0;
}

이 때 아래 표시된 조작부호를 이용하여 데이터의 i50호 요소만 읽을 수 있지만 수정할 수 없고 쓸 수 없다는 것을 발견할 수 있다.
f[50]는 구성원 함수 f.operator[](50)를 호출한 것과 같다. 반환 인용이 아니기 때문에 함수가 되돌아오는 곳에 임시 성형 변수를 만들고 f.data[50]로 초기화하기 때문에 값을 부여할 수 있어도 임시 대상에만 값을 부여한다.그러나 이 함수가 인용으로 되돌아오면 함수 호출이 끝난 후 임시 변수를 만들어서 연산 결과를 저장하지 않고 f.data[50]를 호출이 끝난 곳에 두기 때문에 대상의 내부 상태를 고칠 수 있다.이것이 바로 인용의 좋은 점을 되돌려 주는 것이다.

좋은 웹페이지 즐겨찾기