2016-11-18 2 views
2
int* arr1 = {}; //ok: arr1 == NULL 
int* arr2 = {1,2,3};//error: scalar object requires one element in initializer 

같은 오류가 발생하기 위해 arr1의 초기화를 예상했지만 그렇지 않습니다. 왜 그런가요?이유는 int * arr = {}; 적법한?

편집 됨 :
답에 @krzaq 감사합니다. 나는 네가 한 얘기에 혼란스러워했다.
그래서 다음과 같은 문장은 모든 법적 있습니다 :

int* arr1 = {}; 
int arr2[] = {1,2,3}; 
int* arr3 = {arr2}; 
+0

'INT * arr3 = {arr2}'단지 포인터''의 첫 번째 요소의 ADRESS에 arr3'를 초기화 arr2'. 그것은 그것을 배열로 만들고 있지 않습니다. –

+0

예; 내가 한 일은'arr2'와'arr3'을 같은 주소로 출력합니다. –

답변

3

당신은 잘못된 이름으로 자신을 혼동. arr1arr2은 포인터가 아니라 배열입니다. 포인터를 0으로 초기화 할 수 있으며 arr1에 사용 된 정확한 구문을 사용하여 포인터를 초기화 할 수 있습니다. std::initializer_list<int>으로 포인터를 초기화 할 수 없습니다.

이 여전히 혼란 경우, 일부 추상 형식에 대해 추론하려고 :

using some_type = int*; 

some_type foo = {}; // ok, value-initialized 
some_type bar = {1,2,3}; // not ok, doesn't make sense to initialize 
         // bar with a list of ints 
some_type baz = "a string"; // also not ok, doesn't make sense 
관련 문제