On Thu, Aug 05, 2021 at 12:47:06AM +0000, someone via Digitalmars-d-learn wrote:
> What are the pros/cons of the following approaches ?

1) If the constant is a POD (int, float, etc.), use:

        enum myValue = ...;

2) If the constant is a string or some other array:

        static immutable string myString = "...";
        static immutable Data[] myData = [ ... ];

Unless you have a specific reason to, avoid using `enum` with string and
array literals, because they will trigger a memory allocation *at every
single reference to them*, which is probably not what you want.

        enum myArray = [ 1, 2, 3 ];
        ...
        int[] data = myArray;   // allocates a new array
        int[] data2 = myArray;  // allocates another array

        // they are separate arrays with the same contents
        assert(data !is data2);
        assert(data == data2);

        // allocates a temporary array, does the comparison, then
        // discards the temporary
        if (data == myArray) ...

        foreach (i; 0 .. 10) {
                int[] input = getUserInput(...);

                // allocates a new array at every single loop iteration
                if (input == myArray) { ... }
        }

Don't do this. Use static immutable for arrays and strings, use enum
only for PODs.


T

-- 
It's amazing how careful choice of punctuation can leave you hanging:

Reply via email to