Вопрос

Каков самый простой и наименее включенный способ указать компилятору, будь то с помощью вариантов компилятора, #defineс typedefS или шаблоны, что каждый раз я говорю T, Я действительно имею в виду T const? Я бы предпочел не использовать внешний препроцессор. Так как я не использую mutable Ключевое слово, это было бы приемлемо для переназначивания для обозначения музейного состояния.

Редактировать: Поскольку намерение этого было ошибочно полностью (И поскольку я не был рядом с некоторыми часами, чтобы уточнить), позвольте мне объяснить. По сути, я просто хочу знать, какие системы доступны для манипулирования системой типа во время компиляции. Мне все равно, если это создает нестандартный, плохой, ненаправленный, бесполезный код. Я не собираюсь использовать его в производстве. Это просто любопытство.

Потенциальные (неоптимальные) решения до сих пор:

// I presume redefinition of keywords is implementation-defined or illegal.
#define int int const
#define ptr * const
int i(0);
int ptr j(&i);

typedef int const Int;
typedef int const* const Intp;
Int i(0);
Intp j(&i);

template<class T>
struct C { typedef T const type; typedef T const* const ptr; };
C<int>::type i(0);
C<int>::ptr j(&i);
Это было полезно?

Решение

Возьмите компилятор с открытым исходным кодом C ++ и измените его.

Я думаю, что главная причина их положения заключается в том, что люди думают, что вы пытаетесь изменить C ++. Скажите им вместо этого вы создаете новый язык, называемый «C-Const» как университетский проект.

Лично я думаю, что это интересная идея - вы можете получить все виды выработков производительности и читаемости от неизменных типов - просто посмотрите на большинство функциональных языков.

Другие советы

Даже если вы можете сделать это (что я подозреваю, что вы не являетесь), подумайте о других людях, читающих ваш код. Они вряд ли поймут, что все const, и в результате в конечном итоге не понять ваш код.

Вы пытаетесь сказать компилятору или рассказать другим людям, читающим или использовать свой код? Компилятор не будет делать ничего другого, только потому, что используется пользовательский тип const. Отказ Действительно, все это делает, изменяет набор методов (пользователь, определенный или неявный), который можно использовать с этим объектом. В свою очередь, что мая Разрешить компилятору вывести некоторые оптимизации на представлении времени выполнения.

Для class/struct Типы, вы можете сделать это понятно как к компилятору, так и пользователям, просто сделав каждый член Const:

class Point {
    // An immutable Point data object
    public:
        Point(int ix, int iy): x(ix), y(iy) { }
        Point(const Point& p): x(p.x), y(p.y) { }

        Point add(const Point& p) const;
        int taxiDistance() const;
        // etc... all const members

        const int x, y; // const can only be init'd at construction time

     private:
        Point& operator=(const Point& p); // never implemented!
}

Я бы совет против этого. Если вам удается добиться того, чтобы вы достигнуть цели (включая вас через некоторое время) удивлен, когда он читает ваш код, и он ведет себя отлично, чем он ожидает.

Пожалуйста, добавьте Const Modifier Rapid для всех, где это необходимо. Ваш код будет чаще прочитать тариф, то он будет написан!

Вы можете сохранить стандарт код C ++ и разработать дополнительный слой проверки типа.

Пустой смежный макрос может служить подсказкой для Const Checker.. Отказ Явный постоянный может понадобиться в местах, чтобы сделать код компиляции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top