2017-03-25 7 views
3
string three() { return “kittens”; } 

const string four() { return “are an essential part of a healthy diet”; } 

this 문서에 따르면 첫 번째 줄은 수정 가능한 rvalue이고 두 번째 줄은 const rvalue입니다. 아무도 이것이 무슨 뜻인지 설명 할 수 있습니까?수정 가능한 rvalue와 const rvalue의 차이점은 무엇입니까?

+0

분명히 고양이가 자라고 고양이가되기 때문입니다. – Yakk

+2

첫 번째로 할 수 있습니다. 'three() [0] = 'K'', 두 번째 함수로는 그렇게 할 수 없습니다. –

+0

이름이 이미 모두를 말합니다. 하나는 const이고 다른 하나는 isnt입니다. – user463035818

답변

3

함수의 반환 값은 std :: string의 복사 생성자를 사용하여 복사됩니다. 디버거를 사용하여 프로그램 실행을 단계별로 수행하면 확인할 수 있습니다.

conments가 말하는 것처럼, 그것은 꽤 자기 explantory. 첫 번째 값은 반환 할 때 편집 할 수 있습니다. 두 번째 값은 읽기 전용입니다. 그것은 일정한 값입니다. 예를 들어

:

int main() { 


    std::cout << three().insert(0, "All ") << std::endl; // Output: All kittens. 

    std::cout << four().insert(0, "women ") << std::endl; // Output: This does not compile as four() returns a const std::string value. You would expect the output to be "women are an essential part of a healthy diet”. This will work if you remove the const preceding the four function. 

} 
+0

'four(). begin(), four.end()'에 대해 확실합니까? 그것은 다른'std :: string'에 반복자가 될 것입니다, 그렇죠? – Zereges

+0

@Zereges. 용서 받았다. – 0xDEFACED

0

r- 수치가 할당 연산자의 기록 측에서 기록 할 수있는 것입니다. A 수정 가능 Rvalue은 실행 중에 언제든지 값을 변경할 수있는 이름 (이름에서 볼 수있는 것)입니다. 한편, const Rvalue은 프로그램 실행 중에 변경할 수없는 상수입니다.