C++

auto & 중괄호 초기화 & nullptr

Keisa 2023. 9. 28. 13:37

auto 

: 타이핑 수, 형식 연역에서 이점이 있음.

단, 대리자 형식을 반환하는 경우에는 예기치 않은 동작을 함. 이때 대리자 형식 반환 사용여부의 확인 후 강제 형 변환진행

ex) bool형 1bit에 true/false값이 담기지만 C++에서는 1bit를 다룰 어떠한 문법도 지원하지 않기때문에 어쩔 수 없이 대리자 형식을 반환

 

중괄호 초기화

Widget w3(); -> Widget 생성자가 아니라 함수선언이 되어버림

Widget w3{}; -> 중괄호 초기화로 위 상황 회피

std::initializer_list를 이용한 생성자가 있을 경우에 중괄호 초기화가 가능한 것은 아님

모든 생성자에 중괄호/괄호의 구분 없이 사용가능. 단, std::initializer_list를 이용한 생성자가 존재할 시 해당 생성자를 중괄호 초기화는 강하게 선호한다. 생성 오류시 생성자 호출의 문제일 가능성이 농후.

ex) std::vector를 이용할 경우

주의: 생성자 호출에 () or {} 둘 중에 일관성을 가질것

 

nullptr 

리터럴 0 & null의 값은 int이지 포인터가 아니다. nullptr은 모든 형식의 포인터. nullptr은 std::nullptr_t로 암묵적으로 모든 포인터 형식으로 변환된다.

ex) auto result = findRecord(....)

if(result == 0) -> 'int or 포인터'냐의 경우에 대한 중의성을 해소가능

'C++' 카테고리의 다른 글

enum/enum class  (0) 2023.09.28
별칭 선언(using)  (0) 2023.09.28
형식 연역  (0) 2023.09.28
보편 참조  (0) 2023.09.28
C++ 복사  (0) 2023.09.28