Есть ли функциональная разница между следующими?
Пока объединенные области разрешаются должным образом, тогда Нет .
Есть ли разница в оптимизации между следующими?
Время выполнения или двоичный размер? номер
Если вы хотите построить оптимизаций, то дополнительная сложность будет введена через using
и / или путем повторного открытия пространства имен.
Я не использую первое, потому что разрешение может быть проблематичным.
Я не использую последнее, потому что легко получить новые объявления.
Как я его использую:
namespace {
// ... private stuff
}
SomeClassNamespace::SomeClass::SomeClass() {}
...
это немного многословно, но быстро разрешает определения с их объявлениями, уменьшает вероятность коллизий, может уменьшить ошибки программиста и может уменьшить размер двоичного файла, если определения в анонимном пространстве имен экспортируются (в случае, если вы также используете частные реализации). Конечно, также имеет смысл сохранить ваши внутренние компоненты ( "некоторые вещи в SomeClassNamespace, не определенные в SomeClass.h" ) в правильном пространстве имен (при условии, что они используются в нескольких TU).