Термин «объект», используемый повсюду в черновике C11 (N1570), за исключением 6.5p6 («Правило действующего типа»), относится к области хранения, которая связана с каким-то конкретным типом.Если int *p
является допустимым ненулевым указателем, он будет указывать на объект типа int
«на» или «только что прошедший».Похоже, что 6.5p6 использует термин «объект» для обозначения некоторой области хранения, которая может быть или не быть на самом деле объектом, но остальная часть Стандарта не использует термин «объект» таким образом.Помимо прочего, в спецификации для malloc
не говорится, что он возвращает указатель на объект или что он создает объект, а скорее, что он возвращает указатель на область памяти, достаточно большую, чтобыДержите объект заданного размера.
Поскольку 6.5p6 использует термин «объект» способом, который противоречит его использованию везде, его значение будет зависеть от того, как вы решите определить этот термин.В отсутствие сноски 87 («Выделенные объекты не имеют объявленного типа.») Можно решить эту проблему, просто заметив, что эффективный тип каждого объекта - это просто его тип.Это на самом деле работало бы просто отлично, если бы кто-то распознавал области хранения как удерживающие суперпозицию всех объектов, которые могли бы в них поместиться, но интерпретировал сноску 88 из 6.5p7 («Цель этого списка - указать те обстоятельства, при которых объект может или можетне быть псевдонимом. ") говоря о том, что единственными" объектами ", к которым применяется правило, являются те, которые используются в том же контексте, что и lvalue, без того, чтобы их не использовали заново и визуально при выводе этого lvalue.
Какоднако в сноске 87 четко указывается, что пункт 6.5p6 должен использовать значение «объект», отличное от всего остального в Стандарте, не уточняя, что это за значение.Я не думаю, что возможно сформулировать определение, которое разумно обрабатывает все угловые случаи, и кажется сомнительным, что авторы Стандарта имели согласованное значение для того, что вещи были или не были «объектами» для целей 6.5p6 или 6.5p7,Следовательно, значение 6.5p6 и 6.5p7, а также то, что будет на их основе допустимо, будет в значительной степени зависеть от того, как читатель выберет смысл слова «объект».