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() (* /* ... */ *)
Одно и то же имя может быть описано одновременно и для
класса или перечисления, и для объекта данных или функции в
одной и той же области видимости.
[Назад] [Содержание]
| Главная |