비-const lvalue 참조가 필요한 전용 멤버로 객체를 생성하는 경우 Foo의 경우처럼 생성자에서는 적절한 값을 전달하는 것이 어려울 수 있습니다. Foo 클래스를 수정하는 것이 항상 가능한 것은 아니며 원시 포인터를 사용하는 것은 바람직하지 않습니다.
이 상황에서 오류는 'int&' 유형의 lvalue 참조를 'int' 유형의 rvalue에 바인딩하려고 할 때 발생합니다. Bar 클래스의 전용 멤버 'f'를 초기화합니다. Foo 생성자는 임시 값이 아닌 명명된 변수를 기대합니다. 이 경우 'genValue()'는 정수를 반환합니다.
문제를 해결하려면 값으로 Foo 생성자에 인수를 전달하는 것이 좋습니다. 참고로. 이렇게 하면 'genValue()'에 의해 반환된 정수의 복사본이 생성되어 Foo 객체의 'x' 멤버에 할당됩니다.
수정된 코드는 다음과 같습니다.
<code class="cpp">class Foo { public: Foo(int x) { // Pass by value this->x = x; } private: int x; }; class Bar { public: Bar(): f(genValue()) { // Pass by value } private: Foo f; int genValue() { int x; // do something ... x = 1; return x; } };</code>
genValue() 반환 값을 실제 인수로 전달하여 컴파일러는 임시 변수의 값을 Foo 객체의 x 멤버에 할당합니다. 이 접근 방식은 의도한 동작을 유지하면서 오류를 방지합니다.
위 내용은 Const가 아닌 Lvalue 참조를 사용하여 Private 멤버를 초기화할 때 바인딩 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!