const 멤버가 본문이 아닌 생성자 이니셜 라이저에서 초기화되어야하는 이유는 무엇입니까?
const
생성자 본문이 아닌 생성자 이니셜 라이저 목록에서 초기화 된 것으로 선언 된 클래스 멤버가 필요한 이유는 무엇 입니까?
둘의 차이점은 무엇입니까?
C ++에서 개체는 실행이 생성자의 본문에 들어갈 때 완전히 초기화 된 것으로 간주됩니다.
당신은 말했다 :
"왜 const가 본문이 아닌 생성자 이니셜 라이저 목록에서 초기화되어야하는지 알고 싶었습니다."
누락 된 것은 초기화 목록에서 초기화 가 발생 하고 생성자 본문에서 할당이 발생한다는 것입니다. 논리의 단계 :
1) const 객체는 초기화 만 가능합니다.
2) 개체에는 초기화 목록에서 초기화 된 모든 구성원이 있습니다. 명시 적으로 초기화하지 않더라도 컴파일러는 기꺼이 그렇게 할 것입니다 :-)
3) 따라서 1)과 2)를 합치면 const 인 멤버는 초기화 목록에서 발생하는 초기화시에만 할당 된 값을 가질 수 있습니다.
const
참조 변수는 선언 된 줄에서 초기화되어야합니다.
class Something
{
private:
const int m_nValue;
public:
Something()
{
m_nValue = 5;
}
};
다음과 같은 코드를 생성합니다.
const int nValue; // error, const vars must be assigned values immediately
nValue = 5;
생성자의 본문에 const 또는 참조 멤버 변수 값을 할당하는 것만으로는 충분하지 않습니다.
C ++는 멤버 변수를 나중에 생성하지 않고 생성 할 때 초기화 할 수있는 멤버 변수를 초기화하는 또 다른 방법을 제공합니다. 이것은 초기화 목록을 사용하여 수행됩니다.
두 가지 방법으로 변수에 값을 할당 할 수 있습니다. 명시 적 및 암시 적 : 일반 복사를 클립 보드로보기?
int nValue = 5; // explicit assignment
double dValue(4.7); // implicit assignment
초기화 목록을 사용하는 것은 암시 적 할당을 수행하는 것과 매우 유사합니다.
기본 및 멤버 데이터 개체를 초기화하는 데 사용되는 멤버 초기화 목록은 생성자의 선언이 아니라 정의에 있습니다.
cpp-tutorial 및 Code Wrangler 에 대해 자세히 알아보십시오 .
상수 변수와 참조는 선언 할 때 즉 사용하기 전에 초기화해야하기 때문입니다. 그러나 생성자는 변수를 초기화하지 않고 변수에 값을 할당하므로 상수 및 참조에 대해 초기화 목록을 사용해야합니다.
'Nice programing' 카테고리의 다른 글
IISRESET과 IIS Stop-Start 명령의 차이점 (0) | 2020.11.21 |
---|---|
문서에 쓰기 실행 : 명시 적으로 열리지 않는 한 비동기 적으로로드 된 외부 스크립트에서 문서에 쓸 수 없습니다. (0) | 2020.11.21 |
메시지 대기열은 Linux에서 더 이상 사용되지 않습니까? (0) | 2020.11.21 |
QMake의 하위 디렉토리 템플릿을 사용하는 방법은 무엇입니까? (0) | 2020.11.21 |
런처를 만드는 방법 (0) | 2020.11.21 |