1. 程式人生 > 其它 >C++關鍵字explicit有什麼作用?

C++關鍵字explicit有什麼作用?

C++關鍵字explicit作用:
用來修飾類的建構函式,表明該建構函式是顯式的,既然有"顯式"那麼必然就有"隱式",那麼什麼是顯示,什麼又是隱式的呢?
如果C++類的建構函式有一個引數,那麼在編譯的時候就會有一個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件。

/*************************************************************************
	> File Name: 8.3.explicitfoo.cpp
	> Author: 
	> Mail: 
	> Created Time: Mon Jul 26 18:02:25 2021
 ************************************************************************/
#include<stdio.h>
#include<iostream>
using namespace std;

class Myclass {
public:
    explicit Myclass(int num) : m_num(num) {
        printf("constructor num = %d\n", num);
    }
    // explicit: 
    // 1> 只能在類的內部宣告使用,而不能在類的外部宣告;
    // 2> 只能修飾一個引數的建構函式。對於多個引數的建構函式無任何意義;
    // 3> 聲明瞭之後,就不允許隱式轉換!
    
    // explicit 修飾多個引數建構函式無任何意義!
    explicit Myclass(int i, float f, double d) {
        printf("constructor i = %d, f = %f, d = %lf\n", i, f, d);
    }
private:
    int m_num;
};

int main(void) {
    Myclass obj1 = (Myclass)100.123;
    Myclass obj2(int(200));
    Myclass obj3(100.123, 200.123f, 300.123);
    Myclass obj4('a', 200.123f, 300.123);
    return 0;
}

程式碼截圖:

執行結果: