为什么要用explicit
class A{public: explicit A(int i){}//防止隐式转换成int};int main(){ A a = 10;//error: conversion from ‘int’ to non-scalar type ‘A’ requested}那么为什么要加explicit呢,一直搞不清楚,搜中文搜了几次也搜不出什么东西,说来说去就一句:防止隐式转换,但为什么加防止隐式转换呢?
换英文随便搜了下,倒有不少有用信息,有个老外是这么说的:
anyone who doesn’t make a single-argument constructor explicit should be shot. No mercy.
谁要是在单一参数构造函数前不加explicit就该拖出去枪毙,不要怜悯
...太恐怖了,看来做程序员也是门危险的职业啊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值,那么依然多个参数也有可能变成单一参数.所以同样要加上};