참조로 인수를 전달하는 데는 두 가지 이유가 있습니다. (1) 성능 (이 경우 const 참조로 전달하려는 경우)과 (2) 함수 내에서 인수 값을 변경할 수있는 기능이 필요하기 때문입니다.
나는 현대 건축에 서명되지 않은 장기를 전달하는 것이 당신을 너무 느리게 만드는 것이라고 매우 의심합니다. 그래서 나는 당신이 State
메소드 내부의 값을 변경하려고한다고 가정합니다 . 컴파일러는 상수 0
가 rvalue (오류 메시지에서 "non-lvalue")이고 변경할 수 없기 때문에 (오류 메시지에서) 변경할 수 없기 때문에 불평하고 있습니다 const
.
간단히 말해, 전달 된 인수를 변경할 수있는 메서드를 원하지만 기본적으로 변경할 수없는 인수를 전달하려고합니다.
달리 말하면 비 const
참조는 실제 변수를 참조해야합니다. 함수 시그니처 ( 0
) 의 기본값 은 실제 변수가 아닙니다. 다음과 같은 문제가 발생합니다.
struct Foo {
virtual ULONG Write(ULONG& State, bool sequence = true);
};
Foo f;
ULONG s = 5;
f.Write(s); // perfectly OK, because s is a real variable
f.Write(0); // compiler error, 0 is not a real variable
// if the value of 0 were changed in the function,
// I would have no way to refer to the new value
State
메서드 내에서 실제로 변경하지 않으려 는 경우 간단히 const ULONG&
. 그러나 당신은 그것으로부터 큰 성능 이점을 얻지 못할 것이므로 비 참조로 변경하는 것이 좋습니다 ULONG
. 나는 당신이 이미를 반환하고 ULONG
있음을 알고 있으며 그 값이 State
필요한 수정 후의 값이라는 은밀한 의심을 가지고 있습니다 . 어떤 경우에는 간단하게 메서드를 다음과 같이 선언합니다.
// returns value of State
virtual ULONG Write(ULONG State = 0, bool sequence = true);
물론, 나는 당신이 무엇을 쓰고 있는지, 어디에 있는지 잘 모르겠습니다. 그러나 그것은 또 다른 질문입니다.