为什么要用explicit
class A{public: explicit A(int i){}//防止隐式转换成int};int main(){ A a = 10;//error: conversion from ‘int’ to non-scalar type ‘A’ requested}
...太恐怖了,看来做程序员也是门危险的职业啊class A {};class B{public: B() {} explicit B(A const&) {} //2.所以在这加上explicit吧};void f(B const&) {}int main(){ A obj; //f(obj);//1.这里明明是要A,但是把B传进去却可以编译通过,是不是有点很不好呢? f(B(obj));}class B{public: B() {} explicit B(A const&,C=NULL,D=NULL) {}//当然2,3或是多个参数一样要防止,因为c++允许给default值,那么依然多个参数也有可能变成单一参数.所以同样要加上};