程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++:explicit在構造函數的使用及詳解

C++:explicit在構造函數的使用及詳解

編輯:關於C++

explicit的主要用法就是放在單參數的構造函數中,防止隱式轉換, 導致函數的入口參數, 出現歧義.

如果可以使用A構造B, 未加explicit的構造函數, 當使用B進行參數處理時, 就可以使用A, 使得接口混亂.

為了避免這種情況, 使用explicit避免隱式構造, 只能通過顯示(explicit)構造.

下面是代碼, 仔細閱讀必有收獲, 可以試著刪除explicit, 調用注釋的語句.

/************************************************* 
File: main.cpp 
Copyright: C.L.Wang 
Author: C.L.Wang 
Date: 2014-04-01 
Description: explicit 
Email: [email protected] 
**************************************************/
      
/*eclipse cdt, gcc 4.8.1*/
      
#include <iostream>  
      
using namespace std;  
      
class A {};  
      
class B {  
public:  
  // conversion from A (constructor):  
  explicit B (const A& x) {  
      std::cout << "B's constructor" << std::endl;  
  }  
      
  // conversion from A (assignment):  
  B& operator= (const A& x) {  
      std::cout << "B's assignment" << std::endl;  
      return *this;  
  }  
      
  // conversion to A (type-cast operator)  
  operator A() {  
      std::cout << "B's conversion" << std::endl;  
      return A();  
  }  
};  
      
void fn (B arg) {  
    std::cout << "function" << std::endl;  
}  
      
int main ()  
{  
  A foo;  
  B bar(foo);  
  //B bar = foo;    // calls constructor, 添加explicit出錯, 不能默認構造  
  //bar = foo;      // calls assignment  
  //foo = bar;      // calls type-cast operator  
      
  //fn(foo); //添加explicit出錯, 就不能默認的隱式轉換  
  fn(bar);  
      
  return 0;  
}

輸出:

B's constructor  
function

作者:csdn博客 Spike_King

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved