共用方式為


簡單指派 (C++)

簡單指派運算子 (=) 會使第二個運算元的值儲存在第一個運算元指定的物件中。 如果兩個物件都是算術類型,右運算元會在儲存值之前轉換成左運算元的類型。

可以將 const 和 volatile 類型的物件指派給只屬於 volatile 類型的左值,或者是不是 const 和 volatile 類型的左值。

類別類型 (結構、等位和類別類型) 之物件的指派作業是由名為 operator= 的函式執行。 這個運算子函式的預設行為是執行位元複製;不過可以使用多載運算子修改此行為 (如需詳細資訊,請參閱多載運算子)。

只要物件是從指定基底類別明確衍生的任何類別,就可以指派給該基底類別的物件。 反向則不成立,因為可從衍生類別隱含轉換為基底類別,但無法從基底類別轉換為衍生類別。 例如:

// expre_SimpleAssignment.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class ABase
{
public:
    ABase() { cout << "constructing ABase\n"; }
};

class ADerived : public ABase
{
public:
    ADerived() { cout << "constructing ADerived\n"; }
};

int main()
{
    ABase aBase;
    ADerived aDerived;

    aBase = aDerived; // OK
    aDerived = aBase; // C2679
}

參考類別的指派作用就像指派參考所指向的物件。

對於類別類型的物件而言,指派與初始化不同。 為說明指派與初始化的不同之處,假設下列程式碼

UserType1 A;
UserType2 B = A;

上述程式碼示範初始化設定式;它會呼叫建構函式 UserType2,此建構函式接受屬於類型 UserType1 的引數。 假設下列程式碼

UserType1 A;
UserType2 B;

B = A;

指派陳述式

B = A; 

可能會有下列其中一項作用:

  • 呼叫 UserType2 的函式 operator=,前提是必須提供 UserType1 引數給 operator=。

  • 如果 UserType1::operator UserType2 函式存在,呼叫這類明確轉換函式。

  • 呼叫建構函式 UserType2::UserType2,前提是這類建構函式存在,而且接受 UserType1 引數並複製結果。

請參閱

參考

具有二元運算子的運算式