>  기사  >  백엔드 개발  >  C에서 생성자의 `const` 필드를 직접 초기화할 수 없는 이유는 무엇입니까?

C에서 생성자의 `const` 필드를 직접 초기화할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-03 12:50:31159검색

Why Can't I Initialize a `const` Field in a Constructor Directly in C  ?

생성자에서 Const 필드 초기화

객체의 수명 동안 불변으로 유지되어야 하는 const 필드가 있는 클래스를 정의할 때 초기화하는 것이 중요합니다. 올바르게요. 다음 시나리오를 고려하십시오.

문제 설명:

Foo 포인터를 입력으로 받아들이고 Foo 포인터에 대한 불변 참조를 유지하는 C 클래스 Bar를 생성하려고 합니다. 일생. 다음 코드는 컴파일에 실패합니다.

<code class="cpp">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};</code>

해결책:

생성자에서 const 필드를 올바르게 초기화하려면 초기화 목록을 사용해야 합니다.

<code class="cpp">Bar(Foo* _foo) : foo(_foo) {
}</code>

이름 충돌을 피하기 위해 수신 매개변수의 이름을 _foo로 바꿨습니다.

이 접근 방식을 사용하면 Bar 객체가 생성되자마자 foo 포인터가 초기화되고 이후에 변경 불가능하게 유지됩니다. 수명주기 기간.

위 내용은 C에서 생성자의 `const` 필드를 직접 초기화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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