Подтвердить что ты не робот

Std::string vs string в С++

Возможные дубликаты:
Почему используется 'namespace std;' считается плохой практикой в ​​С++?
Использование пространства имен std

Я парил вокруг кучи разных форумов, и я, кажется, вижу это всплывающее окно снова и снова. Это очень важный вопрос.

Обычно я определяю программу с

#include<string>
using namespace std;

string x;

Я вижу кучу образцов кода, которые определяют строку как

std::string.

Какова цель этого? это хорошая практика или есть некоторые функции?

4b9b3361

Ответ 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; до вашего кода, это будет то же самое.