Casting between char[]/wchar[]/dchar[]

Walter Bright newshound at digitalmars.com
Sat Aug 5 12:28:17 PDT 2006


kris wrote:
> Hasan Aljudy wrote:
>> What are the rules for implicit/explicit casting between char[] and 
>> wchar[] and dchar[] ?
>>
>> When one casts (explicitly or implicitly) does the compiler 
>> automatically invoke std.utf.toUTF*()?
>>
>> Here's an idea that should simplify much of string handling in D:
>> allow char[] and wchar[] and dchar[] to be castable implicitly to each 
>> other, provided that the compiler invokes the appropriate 
>> std.utf.toUTF* method.
>> I think this is perfectly safe; no data is lost, and string handling 
>> can become much more flexable.
>>
>> Instead of writing three version of the same funciton for each of 
>> char[] wchar[] and dchar[], one can just write a wchar[] version (for 
>> example) and the compiler will handle the conversion from/to char[] 
>> and dchar[].
>>
>> This is also relevies developers from writing templetized 
>> functions/class when they deal with strings.
>>
>> Thoughts?
> 
> This one was beaten soundly around the head & shoulders in the past :)
> 
> In a systems language like D, one could argue that hidden conversions 
> and/or translations (a) can mask what would otherwise be unintended 
> compile-time errors (b) can be terribly detrimental to performance where 
> multiple conversions are implicitly applied. Such an environment could 
> potentially put C0W to shame in terms of heap abuse -- recall some of 
> the recent CoW examples, and sprinkle in a few unintended conversions 
> for good measure :)
> 
> IIRC, the last time this came up there was a pretty strong feeling that 
> such things should be explicit (partly because it can be an expensive 
> operation ~ likely sucking on the heap also).

Yes. It's hard to judge where the line is, but too many implicit 
conversions leads to very hard to understand/debug programs.

> Although foreach() will 
> convert on the fly, that's perhaps not something one should do with 
> extensive chunks of text?

foreach also doesn't consume memory for the conversion.



More information about the Digitalmars-d mailing list