[expr.call]
Изменение: Неявное объявление функций запрещено.
Обоснование:
типобезопасная природа C ++.
Влияние на исходный объект:
удаление семантически четко определенного объекта. Примечание: исходная функция была помечена как «устаревшая» в ISO C.
Сложность преобразования:
синтаксическое преобразование. Средства для создания явных объявлений функций довольно широко распространены на рынке.
Насколько широко используется:
Обычный.
[expr.post.incr], Изменение:
оператор декремента не может использоваться с операндом.
Обоснование: функция с удивительной семантикой.
Влияние на исходную функцию: допустимое выражение ISO C, использующее оператор декремента для lvalue (например, через C typedef in ), неправильно сформировано в этом международном стандарте. [expr.pre.incr]
bool
bool <stdbool.h>
[expr.sizeof], Изменение: Типы должны определяться в объявлениях, а не в выражениях.
В C выражение sizeof или выражение приведения может определять новый тип. Например,
[expr.cast]
p = (void*)(struct x {int i;} *)0;
определяет новый тип struct x.
Обоснование:
этот запрет помогает прояснить расположение определений в исходном коде.
Влияние на исходный объект:
удаление семантически четко определенного объекта.
Сложность преобразования:
синтаксическое преобразование.
Насколько широко используется:
редко.
[expr.cond], [expr.ass], Изменение: Результат условного выражения, выражений присваивания или выражений запятой может быть именующим.
Обоснование:
C ++ - объектно-ориентированный язык, в котором относительно больше внимания уделяется lvalue. Например, функции могут возвращать lvalue.
Влияние на исходную функцию:
изменение семантики четко определенной функции. Некоторые выражения C, которые неявно полагаются на преобразования lvalue-to-rvalue, дадут разные результаты. Например, [expr.comma]
char arr[100]; sizeof(0, arr)
дает
100
в C ++ и
sizeof(char*)
C.
Сложность преобразования:
программы должны добавлять явное приведение к соответствующему rvalue.
Насколько широко используется:
редко.