인프런 커뮤니티 질문&답변
이니셜라이저 리스트
작성
·
257
1
int arr[3]={1,2,3} 이런건 이해가 갑니다.
auto i1 = {10,20,30} 이나
IntArray int_array {1,2,3,4,5} 이런건 처음보는 경우라 무슨 말인지 초장부터 이해가 안갑니다 ㅠㅠ
#include <iostream>
#include <cassert>
#include <initializer_list>
using namespace std;
class IntArray{
private:
unsigned m_length=0;
int *m_data=nullptr;
public:
IntArray(unsigned length):m_length(length){
m_data=new int[m_length];
}
IntArray(const std::initializer_list<int> &list):IntArray(list.size()){
int count=0;
for(auto &e : list){
m_data[count]=e;
++count;
}
}
};
int main(int argc, const char * argv[]) {
int arr1[5]={1,2,3,4,5};
int *arr2=new int[5]{1,2,3,4,5};
auto il={10,20,30};//initializer list
IntArray int_array{1,2,3,4,5};
cout<<int_array<<endl;
return 0;
}
퀴즈
사용자 정의 타입에 대해 연산자 오버로딩을 하는 주된 목적은 무엇일까요?
코드 실행 속도를 빠르게 하기 위해
사용자 정의 타입을 내장 타입처럼 자연스럽게 사용하기 위해
객체의 메모리 관리를 자동화하기 위해
클래스의 상속 관계를 정의하기 위해
답변 1
1
안녕하세요!
C++11 부터 지원하는 문법 중 하나인데 중괄호 부분을 initializer_list 객체라고 묶어 생각하시면 좀 더 수월해요
그렇게 생각했을 때, IntArray int_array {1,2,3,4,5} 는 int_array 라는 객체를 생성할건데 파라미터를 {1,2,3,4,5} 를 넘겨 만들거다라는 의미입니다. 이 {1,2,3,4,5} 가 바로 initializer_list 객체이구요!
그래서 코드를 보시면 IntArray 생성자중에 initializer_list 파라미터를 받는 생성자가 있죠.
객첸데 약간 배열같은 느낌이라고 보시면 됩니다.
이 곳 설명 정말 자세한데 한번 참고해보세요 https://modoocode.com/286





