C++:explicit在结构函数的利用及详解
当前位置:以往代写 > C/C++ 教程 >C++:explicit在结构函数的利用及详解
2019-06-13

C++:explicit在结构函数的利用及详解

C++:explicit在结构函数的利用及详解

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

    关键字:

在线提交作业