C ++ std :: string и string - PullRequest
       82

C ++ std :: string и string

1 голос
/ 30 сентября 2011

Не думаю, что кто-нибудь скажет мне, в чем разница между использованием std :: string и просто строковым типом данных в C ++ ??

В какой ситуации следует использовать std :: string вместо стандартной строки ??

Спасибо.

Ответы [ 3 ]

9 голосов
/ 30 сентября 2011

Они оба одного типа.std::string указывает пространство имен, в то время как string имеет смысл, только если используется оператор using namespace std; или using std::string.Так что не имеет значения, что вы используете (если вы последовательны).

Если вы говорите о строковых литералах (таких как "hello"), то они имеют типconst char [], что неявно затухает в const char *.std::string имеет не explicit конструктор, который принимает const char *, это позволяет неявное преобразование из const char * в std::string.Обратную операцию можно выполнить с помощью метода std::string::c_str().

Если вы ищете причину использовать std::string вместо const char *, тогда я думаю, что мой ответ будет "столько, сколько выможет».

4 голосов
/ 30 сентября 2011

Это, вероятно, одно и то же в вашей программе. «Стандартная» строка находится в пространстве имен «std». Если вы «используете std :: string;» или "используя пространство имен std;" внутри модуля они эквивалентны. Если вы не указываете выражение «using», то вам необходимо указать пространство имен объекта. Желательно не предоставлять операторы using в заголовочном файле, и поэтому вы обычно будете видеть разрешение / спецификаторы пространства имен на объектах. (т.е. std :: vector, mynamespace :: myclass и т. д.). Использование «using» более распространено в файлах реализации, где они не влияют на другие файлы, как если бы они были указаны в заголовочном файле.

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

Итак:

File: stdString.cpp
-------------
#include <string>
#include "providerx/string.h"

using namespace std;

void foo()
{
   string x;          // Using string object provided by the C++ standard library
   std::string y;     // Again, using C++ standard lib string
   providerx::string  // Using string object defined within the providerx namespace
}




File: providerString.cpp
-------------------
#include "providerx/string.h"

using providerX::string;

void foo()
{
    string x;   // Using providerx string object
}
1 голос
/ 30 сентября 2011

Скорее всего, у вас есть using namespace std где-то в вашем коде. Это позволяет вам получить доступ к членам пространства имен std без разрешения области. Поэтому ...

std :: string == string

...