读书人

为何要用explicit

发布时间: 2012-12-22 12:05:06 作者: rapoo

为什么要用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值,那么依然多个参数也有可能变成单一参数.所以同样要加上};


读书人网 >编程

热点推荐