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: