[英]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.