簡體   English   中英

C ++ std :: string和string

[英]C++ std::string and string

我不認為有人告訴我在C ++中使用std :: string和字符串數據類型有什么區別?

在什么情況下應該在標准字符串上使用std :: string?

謝謝。

他們都是同一類型。 std::string指定名稱空間,而string僅在using namespace std;時才有意義using namespace std; using std::string語句。 因此,只要您保持一致,使用什么都不會有任何區別。

如果您在談論字符串文字(例如"hello" ),那么它們的類型為const char [] ,它隱式地在const char *衰減。 std::string具有采用const char *的非explicit構造const char * ,這允許從const char *隱式轉換為std::string 可以使用std::string::c_str()方法完成相反的操作。

如果您正在尋找使用std::string而不是const char *的理由,那么我想我的回答將是“盡可能多”。

這些在您的程序中可能是同一件事。 “標准”字符串位於“ std”命名空間內。 如果您正在“使用std :: string;” 或“使用命名空間標准”; 在模塊中,則它們是等效的。 如果未指定“ using”語句,則需要提供對象的名稱空間。 最好不要在頭文件中提供“ using”語句,因此通常會在對象上看到名稱空間解析/說明符。 (即std :: vector,mynamespace :: myclass等)。 在實現文件中使用“使用”更為常見,在實現文件中,它們不會像在頭文件中指定的那樣影響其他文件。

可以使用來自另一個提供程序的字符串對象。 在這種情況下,提供程序將/應該在自己的名稱空間中實現字符串對象實現,並且您需要聲明所使用的字符串對象。

所以:

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
}

最有可能的是,您在代碼中的某處using namespace std 這允許您訪問std名稱空間的成員而無需解決范圍。 因此...

std :: string ==字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM