C++ Builder 10.2 Tokyo > FindComponent()한 결과를 TEdit *에 넣는 경우 > dynamic_cast와 (TEdit *)캐스트의 차이
6603 단어 mistakecppBuildercastdifference
RAD Studio 10.2 Tokyo Update 3
Windows 10 Pro (64bit) バージョン 1803 (April 2018 Update)
의문
다음 구성 요소가 있다고 가정합니다.
TEdit * edPtr에 FindComponent ()의 결과를 할당 할 때 다음 차이점이 있습니까?
dynamic_cast<TEdit *>
(TEdit *)
캐스트 code
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TEdit *edPtr;
String msg = L"";
// 1. dynamic_cast
edPtr = dynamic_cast<TEdit*>(FindComponent("Edit1"));
if (edPtr != NULL) {
msg += L"1a: Edit1(dynamic_cast): Exist\r\n";
}
edPtr = dynamic_cast<TEdit*>(FindComponent("CheckBox1"));
if (edPtr != NULL) {
msg += L"1b: CheckBox1(dynamic_cast): Exist\r\n";
}
// 2. TEdit * cast
edPtr = (TEdit *)(FindComponent("Edit1"));
if (edPtr != NULL) {
msg += L"2a: Edit1(TEdit * cast): Exist\r\n";
}
edPtr = (TEdit *)(FindComponent("CheckBox1"));
if (edPtr != NULL) {
msg += L"2b: CheckBox1(TEdit * cast): Exist\r\n";
}
ShowMessage(msg.c_str());
}
//---------------------------------------------------------------------------
결과
고찰
dynamic_cast<TEdit *>
의 경우, 다른 형태의 컴퍼넌트는 NULL를 돌려줍니다.(TEdit *)
의 경우, 다른 형태의 컴퍼넌트는 NULL가 되지 않는다. 형 실수의 방지에는
dynamic_cast<TEdit *>
쪽이 좋다.한편, 하기의 의견이 있는 것은 부기해 둔다.
이 dynamic_cast 는 안전하게 캐스트 해 주는 좋은 것입니다만, 「dynamic_cast 는 사용하지 말아라」라고 말해지고 있습니다.
관련
구분
c ++ 빌더 XE4, 10.2 Tokyo
에 있어서는 다음과 같이 하고 있다(code v0.2의 Unit1.cpp).
dynamic_cast<>
에서 구성 요소가 있는지 확인 이 흐름과
dynamic_cast<>
에서의 대입의 차이는 무엇인가.
Reference
이 문제에 관하여(C++ Builder 10.2 Tokyo > FindComponent()한 결과를 TEdit *에 넣는 경우 > dynamic_cast와 (TEdit *)캐스트의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/1f9721196550faeea813텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)