변수에 값을 바인딩하는 방법 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 :
- https://pandas-are-bears.tistory.com/15
- https://learn.microsoft.com/en-us/cpp/cpp/initializing-classes-and-structs-without-constructors-cpp?view=msvc-170
'C, C++' 카테고리의 다른 글
메모리 누수 체크하기 (0) | 2023.09.17 |
---|---|
스마트 포인터 make_unique, make_shared로 사용을 권장하는 이유 (0) | 2023.08.13 |
[C++17] Header 파일 존재 유무 확인하기 (0) | 2023.08.01 |
「C++17」 static inline 멤버 변수 (0) | 2023.05.19 |