It sounds like there is consensus.

Here's a patch for adding this to the style guide:
https://bugs.webkit.org/show_bug.cgi?id=47646

dave

On Wed, Sep 29, 2010 at 9:41 AM, Darin Adler <da...@apple.com> wrote:
> On Sep 28, 2010, at 4:31 PM, Maciej Stachowiak wrote:
>
>> I think the rule should be something like:
>>
>>   3. Do not explicit when the single-argument constructor can be thought of 
>> as a type conversion - the class will be in some sense an alternate form of 
>> its sole parameter. Do use explicit when the single-argument constructor is 
>> *not* reasonably thought of as a type conversion - the single argument just 
>> happens to be the sole initialization parameter. Or to put it another way - 
>> can you imagine having a type conversion operator overload that does the 
>> same thing as this constroctor?
>>
>> Applying this rule to your two examples, Vector(int) should be explicit, 
>> because it doesn't convert the int to a vector, it uses the int as a size 
>> instead of the default one. But String(AtomicString) or AtomicString(String) 
>> need not be explicit, since they convert from one string type to another, 
>> carrying largely the same data.
>>
>> I realize this rule requires some judgment, so it's worse than a purely 
>> mechanical rule, but I think it accurately captures the proper use of 
>> explicit.
>
> This seems like a good rule. I agree completely that it’s the right principle.
>
> When the conversion between types is costly enough, there may be some cases 
> where we don’t want to offer an implicit constructor. Specifically, the 
> implicit conversion from String to AtomicString may be a mistake; we might be 
> better off if we had to utter some explicit function name every time we 
> wanted a string looked up in the atomic string table.
>
> I don’t think of this, though, as a rule for when to use “explicit”. It’s a 
> rule for when to use a constructor that can be used implicitly for type 
> conversion. If a constructor can’t be used that way, an explicit constructor 
> might be OK, or you might not want the other constructor to exist at all. For 
> example, if we want to be more explicit about the cost of looking up an 
> AtomicString, the syntax for making an AtomicString from a String should 
> probably be a named function, not AtomicString(string).
>
>    -- Darin
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to