我很困惑,接着概念:混淆直接初始化和複製初始化
string str="123";
有的書說:使用「=」是拷貝初始化,
但有些文章說:string str="123"
是一樣的string str("123")
。毫無疑問,str(「123」)是直接初始化的。
那麼哪種款式適合string str="123";
?
如何判斷哪些是複製初始化或直接初始化?
我很困惑,接着概念:混淆直接初始化和複製初始化
string str="123";
有的書說:使用「=」是拷貝初始化,
但有些文章說:string str="123"
是一樣的string str("123")
。毫無疑問,str(「123」)是直接初始化的。
那麼哪種款式適合string str="123";
?
如何判斷哪些是複製初始化或直接初始化?
是的,這就是所謂的複製初始化。
相反默認構造STR,然後使用string(const char*)
構建另一個string
從"123"
然後,指派兩個字符串的,編譯器只是構造一個使用字符串的字符串(常量字符*)用「123」。
string str="123"
與string str("123")
相同。毫無疑問 STR(「123」)直接初始
然而記得是可能的,只有對應的構造是不explicit。
它只是語法的問題:
T x = y;
是副本初始化和
T x(y);
是直接初始化。
對於任何類型的T
都是如此。具體發生什麼取決於哪種類型的T
。對於原始類型(例如int
s),兩者完全相同。對於類類型(例如std::string
),兩者實際上是相同的,儘管複製初始化要求複製構造函數是可訪問的和非顯式的(儘管在實踐中實際上不會調用它)。
是與str拷貝構造函數相關的字符串str =「123」並被稱爲複製初始? – jiafu 2013-04-25 08:37:57
@家福:語法形式是「複製初始化」。它會導致一個調用,轉換構造函數,但是,它需要一個'char const *'。原則上,可能有兩個*構造函數調用,轉換後跟着複製,但第二個調用通常是被忽略的。 – 2013-04-25 08:40:15
這一切都取決於你的編寫代碼的風格。 – plsgogame 2013-04-25 08:13:38
請參閱[copy initianization](http://www.gotw.ca/gotw/036.htm)。 – juanchopanza 2013-04-25 08:21:31
你的意思是說,使用'='是複製初始? – jiafu 2013-04-25 08:22:11