简单的赋值(C++)

简单的赋值运算符 (=) 在第一个操作数指定的对象分配给第二个操作对象的值存储。如果两个对象是算术类型,正确的操作数转换为左的类型,在存储值之前。

const 对象和变量的类型可以分配给是公平可变或不是常数和变量类型的左值。

对对象的分配类类型 (结构、联合和类类型) 由名为 operator= 的功能执行。此运算符函数默认行为是执行按位副本;但是,使用重载运算符,此行为进行修改。(请参见 重载运算符 有关更多信息。)

任何明确派生类对象从特定基类的可分配到基类的对象。,因为具有一个隐式强制转换从派生类为基类,但不从基类为派生类,撤消不为 true。例如:

// 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;

上面的代码显示一个初始值设定项;它调用带有类型 UserType1的参数 UserType2 的构造函数。如果代码

UserType1 A;
UserType2 B;

B = A;

赋值语句

B = A; 

可以具有以下操作之一:

  • ,假定 operator= 随 UserType1 参数,调用 UserType2的功能 operator=。

  • ; 如果该函数存在,调用显式转换功能 UserType1::operator UserType2。

  • 调用构造函数 UserType2::UserType2,这样,假定存在构造函数,它采用 UserType1 参数并复制结果。

请参见

参考

与二元运算符的表达式