static vs namespace анонимный

В C ++ мы подготавливаем двумя сходными механизмами тому, чтобы ограничивать область приложения переменной файлом настоящего кода (не заголовок):

//fichero.cpp

// opción 1
static std::string Mensaje = "algo"; 

// opción 2
namespace
{
  std::string Mensaje = "algo";
}

Какое-то различие между обоими выборами есть?: который было бы нужно использовать?: почему?

10
задан 07.02.2017, 12:06
1 ответ

Сегодня, для примера, о котором ты упоминаешь (это, для случая, в котором static он не используется, чтобы объявлять переменные член, и отказываясь от Вашего использования, объявив, или которое должно осуществлять классы или функции), они служат для того, чтобы сделать точно то же самое, что он состоит в том, чтобы ограничивать использование этих переменных только файла, в котором они высказываются.

В каком-то моменте комитет C++ он предпочел осуждать ("deprecate") использование static, оставаясь использование namespaces без такого имени как единственный выбор, официально принятый как хорошая практическая. Это уже не случай, и сейчас оба служат для того же самого и приняты. Разум состоял в том, что просто было бы трудным замышлять, что это использование static он был перемещен C++, особенно считая одну из Ваших целей это совместимость с C.

Сейчас... самое очевидное различие - что с использованием namespace ты уберегаешься писать static для каждой переменной. Было бы возможно говорить, что он больше согласно философии C++.

В конце концов решение твое, но я добавляю тебе другие наблюдения, которые могут помогать тебе:

  • С одной стороны, использовать static он мог бы становиться более известным для других людей, которые читают код, особенно, если вышеупомянутые люди знают C, но нет C++.
  • С другой стороны, слово static у него есть другие использования и это prodría становиться смущенным. Например, Ваше использование внутри функции, где любая переменная, объявленная с этим словом будет инициализироваться единственный раз во всей программе, и Ваша стоимость сохранится между вызовами функций; это, если ты инициализируешь переменную с 0, но в конце функции стоимость переменной static его 1, когда ты вновь назовешь функцией стоимость этой переменной, он будет 1, не 0. Если ты хочешь предотвратить проблемы с этим, считай использовать namespace, но у этого также могут быть Ваши проблемы с другими использованиями слова namespace и создавать путаницу в лекторат твоего кода.

Лично, он использовал бы static, потому что сначала я изучил C и никогда я не вспоминаю о том, что использую namespace таким образом.

5
ответ дан 01.12.2019, 08:15
  • 1
    Я удалил комментарии этого ответа, потому что они превращались в discusi и # 243; n, что не шел нигде. @eferion, если этот ответ имеет смысл и есть и #250; til в контексте вопроса таких как est и # 225; формулируемая , пожалуйста ac и # 233; ptala. – Konamiman 17.12.2015, 14:50

Теги

Похожие вопросы