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.