C++之explicit

來源:互聯網
上載者:User

    C++中允許一種特殊的聲明比變數的方式。在這種情況下,可以將一個對應於建構函式參數類型的資料直接賦值給類變數。編譯器在編譯時間會自動進行類轉換,將對應於建構函式參數類型的資料轉換為類的對象。但是這種寬鬆的規則會破壞代碼的可讀性,並導致難以發現的錯誤。其實只要在建構函式前加上explicit則會禁止這種自動轉換。要注意的是explicit只對建構函式起作用。

    下面來舉例說明。

#include<iostream>using namespace std;class Test{public:Test(int x=1):val(x){}int GetVal(void){return val;}private:int val;};main(){Test t1(1);cout<<"t1.val="<<t1.GetVal()<<endl;Test t2=2;cout<<"t1.val="<<t2.GetVal()<<endl;}

在以上代碼中我們發現可以把數字“2”直接發給Test類型的對象t2。這就是c++編譯器隱式轉換的結果。

然後我們在建構函式之前加上explicit:


#include<iostream>using namespace std;class Test{public:explicit Test(int x=1):val(x){}int GetVal(void){return val;}private:int val;};main(){Test t1(1);cout<<"t1.val="<<t1.GetVal()<<endl;Test t2=2;cout<<"t1.val="<<t2.GetVal()<<endl;}

編譯時間會出現以下錯誤:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.