[英]What is the difference between the usage of pointer in the following declarations?
[英]What is the difference between the following declarations?
string str("Hello World");
string str="Hello World";
我似乎不明白兩者之間的區別。 根據我的教科書,第一個語句執行的操作是“使用C字符串初始化構造函數”。 那么,第一條語句是否定義了C字符串,第二條語句定義了C ++字符串? 還請解釋一下C字符串和C ++字符串之間的區別。
這兩行都創建了一個名為str
的C ++ std::string
。 並且都從C字符串初始化它們。 不同之處在於它們的初始化方式:
首先是直接初始化 :
string str("Hello World");
這將調用string(const char *)
構造函數。
第二個是復制初始化 :
string str = "Hello World";
這需要string(const char *)
構造函數是非explicit
(對於先前的方法,該構造函數可以是explicit
)。 根據標准的版本,我們會有一些不同的行為:
string(const char *)
),然后調用copy(或move)構造函數初始化str
。 因此,復制(或移動)構造函數需要可用。 可以省略復制構造函數階段(因此,就像直接初始化情況一樣創建對象),但是仍然需要復制(或移動)構造函數。 如果不可用,則代碼將無法編譯。 string(const char *)
構造函數。 復制(或移動)構造函數不需要可用。 如果復制構造函數不可用,則代碼仍會編譯。 因此,對於這種特殊情況,兩個初始化之間的末尾沒有真正的區別,因此,兩個str
字符串將變為相同。
兩條線限定類型的變量std::string
命名str
由的構造構成std::string
采用一個char const*
作為其參數。 這些行沒有區別。
[...] C字符串[...] C ++字符串[...]?
通常稱為C字符串的不過是char
的零終止數組:
"foobar"; // an array of 7 const chars. 7 instead of 6 because it is 0-terminated.
char foo[] = "foobar"; // an array of 7 chars initialized by the string given
但是std::string
是C ++標准庫的一個類,用於管理動態長度的字符串資源。
“ Hello World”是C字符串(以零結尾的字符序列)。 在這兩種情況下, string
(或std::string
的全名是)都是c ++字符串(不以null終止)。
這兩行調用相同的構造函數,該構造函數采用c字符串並構造一個std::string
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.