9월, 2021의 게시물 표시

UE4 - GENERATED_BODY, GENERATED_UCLASS_BODY

GENERATED_UCLASS_BODY - 생성자 정의가 포함 되어 있어 cpp에 생성자 사용해야함. .h public:      USkillBase(const FObjectInitializer& ObjectInitializer); .cpp USkillBase::USkillBase(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)  {       //constructor. }   GENERATED_BODY - 매크로 사용 시 생성자를 정의하지 않고 도 빌드 가능 .  생성자는 필요하면 정의해서 사용. GENERATED_UCLASS_BODY   상위 버전 ->   GENERATED_BODY 

[C++] explicit 란?

 C++에서 필수 매개변수가 하나만 있는 생성자는 암시적 변환 함수 로 간주되어 매개변수 유형을 클래스 유형으로 변환 합니다.  생성자 Buffer(int size)가 버퍼 크기를 바이트 단위로 사용 하는 버퍼 클래스가 있는 경우  컴파일러가 자동 으로 ( int size )를 Buffers 로 바꾸는 것을 원하지 않을 것입니다. 이를 방지하기 위해 explicit 키워드를 사용 하여 생성자를 선언합니다 . class Buffer  {  explicit Buffer(int size);  } void useBuffer(Buffer& buf); useBuffer(4); //error. explicit 키워드를 사용한다면 컴파일 오류 가 발생하므로 임시 Buffer객체를 전달 하려면 명시적으로 전달 해야 합니다 . useBuffer(Buffer(4)); // <- 생성자에 맞게 명확하게 사용. 요약 explicit 키워드 없이 사용한다면 사용자가 원치 않은 형변환 이 일어나는 등 예기치 않은 버그 가 발생할 수 있기 때문에 애매한 상황 이라면 explicit 키워드를 사용하여 예방 을 해야 한다.

[C++] char* 왜 사용할 수 없지?

 c++ 에서 아래와 같은 코드를 실행 시킬 시. const char* test1 = "t1"; // success char* test2 = "t2"; // fail 위와 같이 컴파일 오류 가 발생한다. 이유 C++에서는 상수-비상수 포인터 사이의 암묵적인 변환 이 일어나지 않아 문자열 리터럴은 항상 const char*로, 명시적으로 수정할 수 없음 을 나타내야 한다. 이해가 안되면 문자열 리터럴을 살펴보고 오자.