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