std :: string vs string в c ++

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

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

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

#include<string>
using namespace std;

string x;

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

std::string.

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


person OVERTONE    schedule 31.03.2011    source источник
comment
я сделал поиск, но не нашел эти вопросы. всем пожалуйста.   -  person OVERTONE    schedule 31.03.2011


Ответы (5)


Как уже указывалось в другом ответе, использование std:: необходимо, если вы не импортируете либо все пространство имен std, либо std::string (см. Ниже).

На мой взгляд, лучше использовать std::string вместо string, поскольку это явно показывает, что это std::string, а не какая-то другая строковая реализация.

Если вы предпочитаете писать только string, я бы посоветовал вам использовать using std::string; вместо using namespace std;, чтобы импортировать в глобальное пространство имен только те вещи, которые вам действительно нужны.

person ThiefMaster    schedule 31.03.2011
comment
То, что здесь не сказано, а это фактически выплата, после объявления using std::string;, вы можете просто написать, например string s="foo";. - person CodeLurker; 05.06.2019

Полное имя string - std::string, потому что оно находится в namespace std, пространстве имен, в котором находятся все функции, классы и объекты стандартной библиотеки C ++.

В свой код вы явно добавили строку 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; вообще - это довольно спорная тема, и многие программисты категорически за или категорически против нее. Я предлагаю использовать все, что вам удобно, и обязательно принимать любые соглашения о кодировании, которые используются при работе над большим проектом.

person templatetypedef    schedule 31.03.2011
comment
Полное имя string - ::std::string, но его никто не использует. - person Mooing Duck; 23.11.2017

Как сказал ssteinberg, это то же самое. Но только синтаксически.

По моему опыту, более полезно использовать полное имя

std::string 

везде, где вам это нужно, или добавьте явный

using std::string;

в начале вашего исходного файла.

Преимущество состоит в том, что таким образом зависимости исходного файла становятся более заметными. Если вы добавите

using namespace std;

это означает, что ваш код может зависеть от чего-либо в этом пространстве имен.

person Assambar    schedule 31.03.2011

Если они не using namespace std, то они должны указать, к какому пространству имен принадлежит строка, используя std::string

person MByD    schedule 31.03.2011

Если у вас есть using namespace std; перед кодом, это то же самое.

person unexpectedvalue    schedule 31.03.2011