반응형
간단하게 말하면 자동 형변환을 막는겁니다
의도하지 않은 형변환이 일어나서 에러가 발생하는 사태를 막는 용도
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
"explicit" 는 "implicit"의 반대말로 명시적이라는 뜻을 가짐.
암시적 변환은 예상치 못한 상황을 만들 수 있기 때문에 경우에 따라서 명시적 선언을 해줌으로써 문제를 막을 수 있습니다.
class Dataset {
public:
explicit Dataset(int);
Dataset(const int);
Dataset(const Dataset& d);
~Dataset();
void DoSomething(Dataset d)
{
//Do Something...
}
};
int main()
{
//DoSomething(5); //error
//Dataset d = 5;
//DoSomething(d); //error
Dataset d(5);
DoSomething(d); //ok
}
"explicit" 는 C++의 특성에 대한 예외 처리라고 생각하시면 됩니다.
C++은 여러 개의 생성사 중 데이터 타입에 따라 자동으로 생성자를 찾아가 주는 기능이 있습니다. 그래서 캐릭터값 대신 정수값을 넣으면 원하지 않는 결과를 얻을 수 있기 때문에 필요에 따라 생성자를 명시적 선언을 해야합니다.
명시적 선언을 한 경우 허용이 제한되기 때문에 잘못된 값을 넣으면 오류가 발생해서 개발자에게 알려줍니다.
Qt의 경우 프로젝트를 생성하고 MainWindows클래스나 Widget 클래스를 보면 프로젝트 생성과 함께 자동적으로 생성자앞에 explicit가 붙어서 나옵니다.
이상 "explicit" 에 대한 내용은 여기까지 입니다.
[출처] [Cpp] explicit|작성자 앤디라이언
반응형