나는 당신이 당신의 클래스에 대한 operator++
를 구현하고 싶었 생각하고, 그 같이 구현해야합니다
Counter & operator++()
{
++count;
return *this;
}
지금 문제는 그것이 무엇을합니까입니까? 사전 증분을 수행합니다. 지금 당신은 ++counter
을 쓸 수와 그 위의 연산자 오버로드를 호출하고, 어떤 내부적 1.
예에 의해 변수 count
을 증가시킬 것이다 :
Counter counter(1);
++counter;
std::cout << counter.get_count() << std::endl;
++(++counter);
std::cout << counter.get_count() << std::endl;
출력 :
2
4
무엇 당신의 원래 코드는 무엇입니까?
당신이 operator++
의 원래 구현을 사용하여 위의 코드를 실행하려고하면 다음과 같은 출력합니다 :
당신이 반환하고 다른 임시 객체를 생성하고 있기 때문에입니다
2
3
,을하는 ++(++counter)
을 쓸 때 외부 사전 증가는 임시 값을 증가시킵니다. 따라서 외부 사전 확장은 counter.count
의 값을 변경하지 않습니다.
++(++(++(++counter)))
을 쓰더라도 그 값은 ++counter
과 같습니다.
여기에 출력을 비교 :
주 ++(++counter)
does NOT invoke undefined behavior.