따라서 참조 초기화 양식 중 일부는 here으로 테스트했습니다. 궁금 할 때 :참조 초기화 양식
T & ref = { arg1, arg2, ... };
및
T && ref = { arg1, arg2, ... };
형태 적 사용과 정확히 무엇을위한 것 . 나는이 같은, 그것은 'initializer_list'로 일시적 배열과 생성자를 초기화 겠 : 이러한 맥락에서
int main()
{
struct _ab
{
_ab() {cout << "_ab()" << endl;}
_ab(initializer_list<int> iArr) : a(*iArr.begin()), b(*iArr.end()) {cout << "_ab()" << endl;}
~_ab() {cout << "~_ab()" << endl;}
int a, b;
};
const _ab & i = {1, 2};
cout << i.a << endl;
return 0;
}
내가 같이 기본 생성자를 사용하여 객체 _ab '임시로 const를 참조를 초기화하려고 :
int main()
{
struct _ab
{
_ab() {cout << "_ab()" << endl;}
_ab(initializer_list<int> iArr) : a(*iArr.begin()), b(*iArr.end()) {cout << "_ab()" << endl;}
~_ab() {cout << "~_ab()" << endl;}
int a, b;
};
const _ab & i(); // error 1
cout << i.a << endl; // error 2
return 0;
}
그러나이 예는이 오류와 함께 컴파일되지 않은 :
오류 1 : 'const를 :: _ AB & 난()) (주' ', 지방 유형을 사용하여 선언 const를main() :: _ ab '가 사용되지만 정의되지 않음 [-fpermissive] |
오류 2 : 비회원 유형 인 'i'에 'a'멤버를 요청하십시오. 'const main() :: _ ab &()'|
정확하게 위의 2 구문이 &을 의미하는 것을 나에게 밝힐 수 있습니까?
편집 : 두 번째 예제의 문제점을 이해합니다. 변수 대신 함수를 선언하고있었습니다. 하지만 여전히 누군가가 참조가 초기화 목록으로 초기화 될 가능성과 사용 된 이유에 대해 설명 할 수 있습니까? 그 첫 번째 오류입니다 - 코드 위
답변을 수정했습니다. –
접두어로,'_ab'는 타입에 대한 이상한 이름입니다.'ab'는 무엇이 잘못 되었습니까? –