Индустрия программирования

         

Современное состояние языка



Приведем беглое описание новых возможностей языка, введенных с момента публикации ARM и
до публикации проекта стандарта в апреле 1995г.

  1. Ведены новые ключевые слова-синонимы для операций (and, and_eq, bitand, bitor, compl,
    not, or, or_eq, xor, xor-equ).
  2. В языке появился булевский тип данных bool и литералы этого типа true и false.
  3. Появился механизм пространств имен (namespace), облегчающий совместную реализацию
    проектов группами программистов и позволяющий избегать проблем при использовании
    нескольких библиотек (ключевые слова namespace и using).
  4. Новое ключевое слово explicit позволяет запретить нежелательное использование
    конструкторов как функций преобразования типов.
  5. Изменены синтаксис и семантика для изменения прав доступа к членам классов. Новый
    механизм позволяет использовать единый синтаксис для использования членов пространств имен и
    членов классов. При этом несколько изменились правила выбора наиболее подходящей из набора
    совместно используемых функций (на основе использования ключевого слова using).
  6. Добавлен механизм явного использования rtti (включающий операцию с ключевым словом


    typeid и класс type_info стандартной библиотеки).
  7. Добавлены новые и скорректированы старые способы явного преобразования типов
    (static_cast, dynamic_cast, const_cast и reinterpret_cast).
  8. Добавлена новая операция new[], парная к операции delete[]; для операций new и delete
    изменена семантика выражения размещения с целью более безопасной обработки исключительных
    ситуаций в конструкторах. Стандартная операция new теперь не может вернуть значение 0 в случае
    нехватки памяти или ошибки, а генерирует исключительную ситуацию. Старый вариант,
    возвращающий 0, доступен программисту только c явным указанием.
  9. Объявления переменных теперь возможны не только в заголовке for-цикла, но и в операторах
    if, while, do-while, switch.
  10. Более точно определено время жизни временных объектов в выражении. Теперь время их
    жизни ограниченно полным выражением, а не концом текущего блока, как сказано в ARM.


  11. Полностью переработано определение шаблонов в Си++. Теперь уже нельзя сказать, что
    шаблоны Си++ являются лишь слегка замаскированными синтаксическими подстановками. Для
    них обязателен синтаксический разбор и контроль семантики (в максимально возможной степени).
    Неоднозначности внутри тел шаблонов, вызываемые неизвестной природой типовых параметров,
    явно разрешаются посредством ключевого словом typename.
  12. Допускаются шаблонные функции-члены нешаблонных классов, вложенные шаблонные
    классы и шаблоны - параметры шаблонов.
  13. Виртуальные функции могут возвращать тип, отличный от типа подменяемой функции
    базового класса, если эти типы являются указателями или ссылками на производный и базовый
    класс.
  14. Перечислимый тип (enum) окончательно утвердился как самостоятельный тип, не являющийся
    ни одним из целочисленных типов. Теперь разрешено совместное использование функций,
    основанное на этом различии; константа 0 перечислимого типа более не считается целочисленным
    0, запрещено ее неявное преобразование к указательному типу.
  15. Ослаблено ограничение на тип, возвращаемый операцией ->. Теперь это может быть
    практически произвольный тип.
  16. Добавлено (на редкость бессмысленное) ключевое слово mutable, позволяющее допускать
    изменение членов объекта константного класса.

Более подробно некоторые из этих изменений рассмотрены в статье [6].

Содержание раздела