C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Справочное руководство. Отличия от C.
 
                  
                      15. Отличия от C

                       15.1 Расширения

     Типы параметров функции могут быть заданы (#8.4) и будут
проверяться (#7.1). Могут выполняться преобразования типов (#
7.1).


     Для выражений с числами с плавающей точкой может исполь-
зоваться плавающая арифметика одинарной точности; #6.2.


     Имена функций могут быть перегружены; #8.9.


     Операции могут быть перегружены; 7.16, #8.5.11.

     Функции могут быть inline-подставляемыми; #8.1.


     Объекты данных могут быть константными (const); #8.3.

     Могут быть описаны объекты ссылочного типа; #8.4, #8.6.3


     Операции new и delete обеспечивают свободное хранение  в
памяти, #7.2.


      виртуальных функций (#8.5.4).

     Имя класса или перечисления является именем типа;  #8.5.


     Любой указатель может присваиваться void* без  применеия
приведения к типу; #7.14.


     Описание внутри блока является оператором; #9.14.


     Можно описывать безымянные объединения; #8.5.13.

                15.2 Сводка Несовместимостей


     Большинство конструкций  C допустимы в С++ без изменения
их смысла. Исключения из этого следующие:


     Программы, использующие одно из новых ключевых слов

  class const delete friend inline
  new operator overload public signed
  this virtual volatile


     как идентификаторы, недопустимы.


     Описание функции f(); означает,  что f не получает пара-
метров, в  C же это значит, что f может получать параметр со-
вершенно любого типа.

     В C внешнее имя может определяться несколько раз, а в С+
+ оно должно быть определено ровно один раз.


     Имена классов в С++ находятся в том же пространстве, что
и прочие имена, поэтому конструкции вроде

  int s;
  struct s (* /* ... */ *);
  f() (* s = 1; *)


     использоваться не могут.  Однако,  для разрешения  боль-
шинства конфликтов   может  применяться  явное  использование
class, struct, union, enum (#8.2) или :: (#7.1). Например:


  int s;
  struct s (* /* ... */ *);
  void f() (*int s; struct s a; *)
  void g() (* ::s = 1; *)


                      15.3 Анахронизмы


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


     Прежнее неопределенное имя может использоваться как  имя
функции в вызове.  В этом случае имя будет неявно описано как
функция, возвращающая int с типом параметра (...).


     Ключевое слово void может  использоваться  для  указания
того, что  функция не получает параметров, так что (void) эк-
вивалентно ().


     Могут использоваться программы,  в которых  используется
синтаксис определения функций в c


  старое_определение_функции:
      спецификаторы_описания opt старый_описатель_функции
  список_описателей тело_функции

  старый_описатель_функции:
      описатель (* список_параметров *)


  список_параметров:
      идентификатор
      идентификатор , идентификатор


например,


  max(a,b) (* return (a<b) ? b : a; *)


     Вместо ::   может  использоваться точка для спецификации
имени в определении функции члена. Например:

  int cl.fct() (* /* ... */ *)


     Одно и то же имя может быть описано одновременно  и  для
класса или  перечисления,  и для объекта данных или функции в
одной и той же области видимости.

[Назад] [Содержание]

Главная