== comparison of string literals, and their usage
bauss
jj_1337 at live.dk
Sun Apr 7 12:23:18 UTC 2019
On Saturday, 6 April 2019 at 19:47:14 UTC, lithium iodate wrote:
> On Saturday, 6 April 2019 at 15:35:22 UTC, diniz wrote:
>> So, I still could store and use and compare string pointers
>> myself [1], and get valid results, meaning: pointer equality
>> implies (literal) string equality. Or am I wrong? The point
>> is, the parser, operating on an array of prescanned lexemes,
>> will constantly check whether a valid lexeme is present simply
>> by checking the lexeme "class". I don't want that to be a real
>> string comp, too expesensive and for no gain.
>>
>> [1] As in the second comp of your example:
>> void main()
>> {
>> auto c2 = "one" == "two";
>> auto c1 = "one".ptr is "two".ptr;
>> }
>
> Not quite. D-strings strictly consist of pointer *and* length,
> so you need to compare the .length properties as well to
> correctly conclude that the strings equal. You can concisely do
> that in one go by simply `is` comparing the array references as
> in
>
> string a = "hello";
> string b = a;
> assert(a is b);
> assert(a[] is b[]);
>
> Of course, if the strings are never sliced, you can just
> compare the pointers and be done, just make sure to document
> how it operates. Depending on the circumstances I'd throw in
> some asserts that do actual strings comparison to verify the
> program logic.
To add onto this.
Here is an example why it's important to compare the length as
well:
string a = "hello";
string b = a[0 .. 3];
assert(a.ptr == b.ptr);
assert(a.length != b.length);
More information about the Digitalmars-d-learn
mailing list