Согласно стандарту C ++ 14, [expr.unary.op] / 3:
Результатом унарного оператора
&
является указатель на его операнд. Операнд должен быть lvalue или квалифицированным идентификатором. Если операндом является квалифицированный идентификатор, называющий нестатический членm
некоторого классаC
с типомT
, результат имеет тип «указатель на член классаC
типаT
» и имеет вид частное обозначениеC::m
. В противном случае, если тип выраженияT
, результат имеет тип «указатель на T» и является prvalue , который является адресом назначенного объекта или указателем на назначенную функцию. [Примечание: В частности, адрес объекта типа «cvT
» является «указателем на cvT
» , с той же квалификацией cv. - конец примечания]
Таким образом, это ясно и недвусмысленно говорит о том, что указатели на тип объекта (то есть a T *
, где T
не является типом функции) содержат адреса.
«адрес» определяется в [intro.memory] / 1:
Память, доступная для программы на C ++, состоит из одной или нескольких последовательностей смежных байтов. Каждый байт имеет уникальный адрес.
Таким образом, адрес может быть любым, который служит для уникальной идентификации конкретного байта памяти.
Примечание: В стандартной терминологии C ++ память относится только к используемому пространству. Это не означает физическую память, виртуальную память или что-то в этом роде. Память представляет собой несвязанный набор распределений.
Важно иметь в виду, что хотя один из возможных способов уникальной идентификации каждого байта в памяти - это присвоение уникального целого числа каждому байту физической или виртуальной памяти, это не единственный возможный способ.
Чтобы избежать написания непереносимого кода, лучше избегать предположения, что адрес идентичен целому числу. Правила арифметики для указателей в любом случае отличаются от правил арифметики для целых чисел. Точно так же мы бы не сказали, что 5.0f
совпадает с 1084227584
, даже если они имеют идентичные битовые представления в памяти (согласно IEEE754).
В сообщении Роя здесь он заявляет
REST API должен тратить почти все описательные усилия по определению медиа-типы, используемые для представления ресурсы и приложение для вождения состояние, или в определении расширенного имена отношений и / или гипертекстовая разметка для существующих стандартные типы носителей. Любые затраченные усилия описание того, какие методы использовать на чем Интересующие URI должны быть полностью определены в рамках правила обработки для медиа-типа (и в большинстве случаев уже определенные существующими типами носителей).
В моей компании мы очень довольны использованием WADL , язык описания веб-приложений. Википедия описывает как: «формат файла на основе XML, который обеспечивает машиночитаемое описание веб-приложений на основе HTTP». Я считаю, что необработанный WADL легко писать, читать и понимать, и он напрямую соответствует концепциям RESTful. Официальный проект предоставляет простую спецификацию, схемы XSD и RELAX NG и инструменты Java.
Для работы с WADL существует ряд инструментов и ресурсов, в том числе:
. Совет: попробуйте включить удобочитаемую документацию, такую как описания, концепции, начало работы, советы по использованию и т. д., в элемент doc
документа WADL, включив элементы HTML, используя пространство имен XHTML. Это может иметь большое значение!
doc
документа WADL путем включения элементов HTML с использованием пространства имен XHTML. Это может иметь большое значение! концепции, начало работы, советы по использованию и т. д. в элементе doc
документа WADL путем включения элементов HTML с использованием пространства имен XHTML. Это может иметь большое значение! Хорошая документация по ReST будет означать документирование вашего типа носителя и только вашего типа носителя.
В типичном сценарии вы создадите такой документ:
Ссылки на различные ресурсы описаны в документе, который можно найти, отправив запрос GET или HEAD серверу по URI закладки (обычно это корень сервера, http: / /www.acme.org) и ищем заголовок HTTP Link:
Ссылка:
, где часть rel
- это связь, а xxx
- это URI, для которого связь была установлена.
В этом документе определяется следующие имена отношений:
application / vnd.acme.services + xml
- это документ с xml
сериализация, которая описывает список ссылок, которые приложение может захотеть обработать.
<links>
<link rel="http://rel.acme.org/customers" href="http://www.acme.org/services/customers" type="application/vnd.acme.customers+xml" />
</link>
applcation / vnd.acme.customers + xml
- это документ с сериализацией xml
, который описывает клиентов.
<customers>
<customer firstname="Darth" lastname="Vador" href="http://www.acme.org/services/customers/28" />
</customer>
и т.д ...
Смысл в том, чтобы дать разработчику возможность перейти по указанным вами ссылкам. Сначала найдите ссылку на индекс , чтобы они могли получить список объектов, к которым они могут перейти.
Обнаружив этот документ, они обнаруживают, что могут видеть список клиентов с определенным Uri, и могут применить GET
против него.
Если они найдут интересующего клиента, они могут перейти по ссылке, определенной в / customers / customer / @ href
, и выполнить GET
, чтобы получить представление об этом клиенте.
Оттуда ваш тип мультимедиа может включать действия которые доступны пользователю, используя дополнительные ссылки. У вас также есть дополнительная возможность отправить запрос OPTIONS к ресурсу, чтобы узнать, можете ли вы разрешить удаление ресурса, или PUT, если вы можете сохранить документ обратно после модификации.
Так что хорошей документации никогда не бывает:
Смысл всего этого состоит в том, чтобы добиться минимальной связи между клиентами и серверами.