• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

32:51초 질문입니다.

24.01.06 16:46 작성 24.01.06 16:47 수정 조회수 272

2

int* pInt = new int[2] (1, 2); 가 아니라

int* pInt = new int[2] {1, 2} 아닌가요??

 

괄호 -> 중괄호 

 

영상이랑 똑같이하면 새 이니셜라이즈 어쩌구 오류가 발생해서요

답변 2

·

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.08

안녕하세요, 인프런 AI 인턴입니다.

이원재님, 말씀하신 부분을 봤을 때, C++에서 배열을 동적으로 할당하면서 초기화하는 표현식을 사용하신 것 같아요.

int* pInt = new int[2] (1, 2);는 올바른 C++ 배열 초기화 문법이 아니며, 컴파일 오류를 발생시킬 수 있습니다. 올바른 배열 동적 할당 및 초기화 문법은 중괄호 {}를 사용하여 int* pInt = new int[2] {1, 2};와 같이 작성하는 것입니다. 그래서 정정하신 부분이 맞습니다. 중괄호를 사용하여 배열 요소를 초기화하는 방식이 맞는 문법이니 해당 방식대로 코드를 수정하신다면 오류 메시지 없이 원하는 대로 작동할 것입니다.

영상에서는 실수로 괄호를 사용한 것일 수도 있으니, 올바른 사용법인 중괄호로 수정하셔서 코드를 실행해 보시기 바랍니다.

0

"C++20 표준"에 와서는 중괄호 초기화의 제한이 사라졌습니다.

int* pArray = new int[2](1, 2); -----> C++20 표준 이후에서 초기화 가능 C++17 이하에선 불가능

int iArray[2](1, 2) -----> C++20 표준 이후에서 초기화 가능. C++17 이하에선 불가능

int* pArray= new int[2]{1, 2}; -----> 이전의 방식대로 여전히 초기화 가능.

int iArray[2]{1, 2} -----> 이전의 방식대로 여전히 초기화 가능.

이라고 정리해볼 수 있습니다!

단, 일반 괄호를 통한 초기화는 유니폼 초기화와는 다르게 하강 변환을 허용하기 때문에 값이 잘리더라도 따로 컴파일 에러를 발생 하지는 않습니다.

이원재님 말씀과 같이 배열을 중괄호를 통해 초기화하는 것도 당연히 허용되며 C++20부터 소 괄호를 통한 초기화도 지원 가능하다고 정리할 수 있을 것 같습니다. 이원재님 컴파일러에서 에러가 발생하는 이유는 컴파일러의 셋팅이 C++20을 사용하도록 설정되어있지 않기 때문입니다. 컴파일러 버젼을 최신으로 설치하셨더라도 설정은 C++14 표준일 확률이 높습니다.

제 강의가 C++20의 문법도 사용하고 있기에 상위 버젼의 C++표준을 사용할 수 있도록 설정하시면 수강에 도움이 되실 겁니다.

프로젝트 C++버젼 표준 설정 방법 : 비쥬얼 스튜디오 상단 메뉴 중 프로젝트 -> (프로젝트이름)속성 -> 구성 속성 -> C/C++ -> 모든 옵션을 클릭하시면 오른쪽에 많은 메뉴가 나오는데 상단 쪽에 위치한(처음 열면 중단에 스크롤 되어 있으므로 스크롤 위로 올리셔야 합니다! ) C++언어 표준을 클릭하시오 ISO C++20 표준으로 설정하시거나 Latest c++을 선택하셔도 됩니다!

 

답변이 수강에 도움이 되셨길 바랍니다!

열공!