Правила избежать коллизии имен находятся оба в стандарте C++ (см. книгу Stroustrup), и упомянул гуру C++ (Sutter, и т.д.).
, поскольку я не хотел иметь дело со случаями и хотел простое правило, я разработал персональный то, которое и просто и корректно:
При именовании символа, Вы избежите коллизии с библиотеками компилятора/ОС/стандарта если Вы:
, Конечно, помещая Ваш код в уникальное пространство имен помогает избежать коллизии, также (но не защитит от злых макросов)
(я использую макросы, потому что они - более загрязняющие код из символов C/C++, но это могло быть что-либо от имени переменной до имени класса)
#define _WRONG
#define __WRONG_AGAIN
#define RIGHT_
#define WRONG__WRONG
#define RIGHT_RIGHT
#define RIGHT_x_RIGHT
От n3242.pdf файл (я ожидаю, что заключительный стандартный текст будет подобен):
17.6.3.3.2 Глобальных набора [global.names]
Certain имен имен и функциональных подписей всегда резервируются к реализации:
— Каждое имя, которое содержит двойное подчеркивание _ _ или начинается с подчеркивания, сопровождаемого прописной буквой (2.12), резервируется к реализации для любого использования.
— Каждое имя, которое начинается с подчеркивания, резервируется к реализации для использования в качестве имени в глобальном пространстве имен.
, Но также и:
17.6.3.3.5 Пользовательских литеральных Литерала суффиксов [usrlit.suffix]
снабжают суффиксом идентификаторы, которые не запускаются с подчеркивания, резервируются для будущей стандартизации.
Этот последний пункт сбивает с толку, если Вы не полагаете, что имя, запускающееся с одного подчеркивания и сопровождаемый строчной буквой, было бы в порядке, если бы не определил в глобальном пространстве имен...
HTML может загружаться откуда угодно, это еще один скрипт , работающий на странице, который не может получать документы из другого источника.