Оценка времени компиляции

Если я напишу

enum chars = digits ~ uppercase;

, будет ли строка объединена во время компиляции? Я предполагаю, что так и будет. Если я заменю его строковым литералом или функцией CTFE, я не смогу измерить какие-либо существенные различия в производительности (даже вызвав это сто миллионов раз). Я получаю разницу, если заменяю enum на const. Мне сказали, что писать так неэффективно. Я думал, что это было удобно и не вижу в этом неэффективности. (Кстати, строка находится в функции, которая вызывается рекурсивно.)

Полный код (преобразование в систему счисления с другой базой)

import std.string;

string toBase(long n, int b) 
in {
    assert(2 <= b && b <= 35);
} body {
    static string sign;
    if (n < 0) {
        n *= -1;
        sign = "-";
    }
    enum chars = digits ~ uppercase;
    size_t r = cast(size_t)(n % b);
    if (n == r) {
        return sign ~ chars[r];
    }
    return toBase((n - r) / b, b) ~ chars[r];
}

Редактировать: обновленный код в ответ на комментарии, не относящиеся к вопросу

string toBase(long n, int b) 
in {
    assert(2 <= b && b <= 35);
} body {
    enum chars = digits ~ uppercase;
    long r = n % b;
    char c = chars[cast(size_t) abs(r)];
    if (n == r) {
        return (n < 0 ? "-" : "") ~ c;
    }
    return toBase((n - r) / b, b) ~ c;
}
12
задан menjaraz 21 July 2012 в 07:54
поделиться