區別說明:賦值操作是在兩個已經存在的物件間進行的,而初始化是要建立乙個新的物件,並且其初值**於另乙個已存在的物件。
編譯器會區別這兩種情況,賦值 的時候呼叫過載的賦值運算子,初始化的時候呼叫拷貝建構函式。
如果類中沒有拷貝建構函式,則編譯器會提供乙個預設的。這個預設的拷貝建構函式只是簡單地復 製類中的每個成員。
下面看例子:
c++中初始化和賦值操作差別是很大的。
對於基本資料型別差別不大:
比如:inta =
12;
//initialization, copy 0x000c to a
a =12;
//assignment, copy 0x000c to a
但是對使用者自定義的資料型別比如string 初始化和賦值就差別很大:
string
&string::
operator=(
const
char
*str )
...
建議在條件允許的情況下最好在初始化的時候就賦值,而盡量避免用=號賦值了,比如用成員初始化列表來初始化成員資料,不在建構函式裡用賦值操作給成員資料.
初始化列表和賦值的區別
1 區別 賦值 和 初始化 這兩個概念 我們知道普通變數編譯器都會預設的替你初始化。他們既能初始化,也能被賦值的,而常量 const 按照其意思只能被初始化,不能賦值。否則與變數就無區別了。所以常量成員 const member 只能用成員初始化列表來完成他們的 初始化 而不能在建構函式內為他們 賦...
成員初始化列表 初始化同賦值的區別
成員初始化列表 初始化同賦值的區別 1.我們可以認為建構函式的執行過程被分成兩個階段,隱式或顯式初始化階段以及一般的計算階段。計算階段由建構函式體內的所有語句構成,在計算階段中資料成員的設定被認為是賦值而不是初始化。初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的...
關於初始化和賦值
class test private char ptr pubic 若test test1 hello 則呼叫的是建構函式 若test test2 test1 則呼叫的是拷貝建構函式 若test test2 test1 則呼叫的是拷貝建構函式 若test test2 test2 test1 則呼叫的...