변수에 값을 바인딩하는 방법 3가지를 소개합니다.

 

Setup

class Coord
{
public:
    Coord( int a, float b )
    {
        mA = a;
        mB = b;
    }
private:
    int mA;
    float mB;
};

 

 

Copy initialization

Coord a = { 10, 3.3f };

 

오른쪽의 값을 대입 연산자(=)를 통해 a에 복사하는 과정을 거칩니다.

 

 

Direct initialization

Coord a( 10, 3.3f );

 

() 소괄호를 사용한 초기화 방법입니다.  복사를 거치지 않고 바로 인자에 바로 전달합니다.

 

 

Brace initialization

Coord a{ 10, 3.3f };

 

C++11 이후 생겨난 초기화 방식입니다. Uniform initialization이라고도 부릅니다. 
생성자를 만들기 번거로울 경우에 직접 멤버 변수를 바인딩 해주는 방법입니다.

 

 


응용

std::vector<Vec4> pixels(canvasWidth * canvasHeight, Vec4{0.8f, 0.8f, 0.8f, 1.0f});

 

생성자가 없는 클래스의 임시 객체를 직접 멤버 변수를 초기화해서 넘겨주는 방식으로 활용이 가능합니다. 


 

Narrow conversions

Coord a{ 30.0f, 1000 }; // X

 

Brace initialization은 특정 룰을 위반한 암묵적 타입 변환을 허용하지 않기 때문에,
다음처럼 타입을 통한 변환은 불가합니다.

참고:https://en.cppreference.com/w/cpp/language/list_initialization

 

 

 

 


Reference :