C++

C++ , explicit

LEEHANDS 2020. 12. 17. 01:04
반응형

간단하게 말하면 ​자동 형변환을 막는겁니다
의도하지 않은 형변환이 일어나서 에러가 발생하는 사태를 막는 용도

 

#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|작성자 앤디라이언

반응형