구성원 변수의 초기화 확인

1514 단어 할당액초기화
지정과 초기화는 서로 다릅니다. People 클래스를 선언한 것으로 가정하면 다음과 같습니다.
class People{
private:
	string ID;
	int birth;
public:
	// 
	People(string & id,int data){	
		ID=id;
		birth=data;
	}
	// 
	People(string id,int data):ID(id),birth(data){
	}
};

C++ 규정: 대상 구성원의 초기화 동작은 구조 함수 본체에 들어가기 전에 발생합니다.
    
값을 부여하는 구조 함수를 바탕으로 먼저 구성원 변수에 초기 값을 설정한 다음에 바로 값을 부여한다.따라서 대부분의 유형에 있어default 구조 함수를 먼저 호출한 다음에copy assignment 조작부호를 호출하는 것보다 한 번에copy 구조 함수를 호출하는 것이 비교적 효율적이다.내장 구성원, 예를 들어 int의 초기화와 할당 비용은 같다.
구성원 변수 사용 초기화의 필요성은 다음과 같다. 만약 변수가reference나const를 사용한다면, 그들은 반드시 초기 값을 필요로 하고, 값을 부여받을 수 없다.
어떤 때는 대상의 구성원이 너무 많아서 반복되는 작업을 피하기 위해 초기화 목록을 계속 사용하지 않고 초기화 표현과 같은 구성원 변수를 초기화 동작으로 바꾸어 하나의 함수체에 봉하여 구조 함수에 호출할 수 있다.
구성원 변수에 대한 초기화는 변수 성명 방식에 따라 진행되며 초기화 순서와 무관합니다.
어떤 때는 초기화할 때 static 대상 ------글로벌 대상을 포함하고namespace 역할 영역에 정의된 대상,class 함수 내,file 역할 영역에 성명된 static 대상을 포함한다.함수체에 성명된 static 대상은local static 대상이고 다른 static 대상은non-local static 대상(함수체에 비한)이다.
C++는 서로 다른 컴파일러 단위 내의non-local static 대상의 초기화에 대한 상대적인 순서가 명확하게 정의되지 않았기 때문에 문제가 발생할 수 있습니다. 어떤 대상을 호출할 때 대상이 초기화되지 않았을 수도 있습니다.해결책은 non-local static 대상을static 대상으로 변환하고 모든non-local static 대상을 자신의 전속 함수 체내로 옮기는 것이다(대상은 함수체에서static로 성명됨). 이 함수는reference가 포함하는 대상을 가리킨다.그 다음에 이 함수들을 호출해서 조작을 하는데, 이 대상을 직접 가리키지 않는다.그러나 다선정에 대해서는 수동으로 함수 호출을 해야 한다.
People & ps(){
	static People p;
	return p;
}

요약:
모든 구조 함수는 대상을 초기화하고 구성원에 내장된 대상을 수동으로 초기화합니다.
AC: 45503780

좋은 웹페이지 즐겨찾기