03 марта 2008

Константы и auto

Поймал себя на недопонимании концепции константной корректности в D2.0. Все-таки константность — это свойство переменной, такое же, как int или double. Константа не просто указывает на невозможность модификации значения переменной, но и предписывает компилятору сделать возможные оптимизации. В частности, может оказаться, что значение константы непосредственно встраивается в код или размещается в read-only страницах памяти. Причем, константы, которые помечаются программистом как немодифицируемые для повышения читабельности, могут изменяться в других местах кода и отличаются от действительно неизменяемых констант. В D2.0 используются ключевые слова const и invariant соответственно. Я столкнулся со следующей особенностью применения атрибута auto:

const int PAGES = 64;
...
auto k = PAGES; // тип такой же, как и у инициализатора
...
k++; // нельзя, т.к. k — const int

Комментариев нет: