Std::string vs string в С++
Возможные дубликаты:
Почему используется 'namespace std;' считается плохой практикой в С++?
Использование пространства имен std
Я парил вокруг кучи разных форумов, и я, кажется, вижу это всплывающее окно снова и снова. Это очень важный вопрос.
Обычно я определяю программу с
#include<string>
using namespace std;
string x;
Я вижу кучу образцов кода, которые определяют строку как
std::string.
Какова цель этого? это хорошая практика или есть некоторые функции?
Ответы
Ответ 1
Как уже сказал другой ответ, использование std::
необходимо, если вы не импортируете ни полное пространство std
, ни std::string
(см. ниже).
По-моему, лучше использовать std::string
вместо string
, поскольку он явно показывает, что это a std::string
, а не какая-то другая реализация строки.
Если вы предпочитаете писать только string
, хотя я бы предложил использовать using std::string;
вместо using namespace std;
только для импорта вещей в глобальное пространство имен, которое вам действительно нужно.
Ответ 2
Полное имя string
равно std::string
, поскольку оно находится в namespace std
, пространстве имен, в котором находятся все функции, классы и объекты стандартной библиотеки С++.
В вашем коде вы явно добавили строку using namespace std;
, которая позволяет использовать что-либо из стандартного пространства имен без использования префикса std::
. Таким образом, вы можете ссылаться на std::string
(реальное имя типа строки), используя сокращенное string
, поскольку компилятор знает, чтобы посмотреть в namespace std
для него.
Разницы между функциональными возможностями string
и std::string
нет, потому что они одного типа. Тем не менее, бывают случаи, когда вы предпочитаете std::string
более string
. Например, в файле заголовка обычно не рекомендуется помещать строку using namespace std;
(или использовать любое пространство имен, если на то пошло), потому что это может привести к тому, что имена в файлах, которые содержат этот заголовок, становятся двусмысленными. В этой настройке вы просто #include <string>
в заголовке, а затем используйте std::string
для обозначения типа строки. Точно так же, если когда-либо была какая-либо неопределенность между std::string
и некоторым другим типом string
, использование имени std::string
устранило бы двусмысленность.
Независимо от того, включите ли вы строку using namespace std;
вообще, это довольно спорная тема, и многие программисты сильно или сильно против нее. Я предлагаю использовать то, с чем вам удобно, и, конечно же, принять любые правила кодирования, используемые при работе над крупным проектом.
Ответ 3
Поскольку ssteinberg говорит, что это то же самое. Но только синтаксически.
По моему опыту, более полезно использовать полное имя
std::string
где вам это нужно, или добавить явный
using std::string;
в начале исходного файла.
Преимущество заключается в том, что таким образом зависимости вашего исходного файла более заметны. Если вы добавите
using namespace std;
это означает, что ваш код может зависеть от чего-либо внутри этого пространства имен.
Ответ 4
Если они не using
namespace std
, тогда они должны указать, к какой строке пространства имен принадлежит, используя std::string
Ответ 5
Если у вас есть using namespace std;
до вашего кода, это будет то же самое.