>백엔드 개발 >C++ >Const가 아닌 Lvalue 참조를 사용하여 Private 멤버를 초기화할 때 바인딩 오류를 해결하는 방법은 무엇입니까?

Const가 아닌 Lvalue 참조를 사용하여 Private 멤버를 초기화할 때 바인딩 오류를 해결하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 01:46:02375검색

 How to Resolve Binding Errors When Initializing Private Members with Non-Const Lvalue References?

바인딩 오류 해결: Lvalue 참조를 Rvalue로 변환

비-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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.