Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;类赋值运算符_C++ - Fatal编程技术网

C++ C++;类赋值运算符

C++ C++;类赋值运算符,c++,C++,我试图理解如何实现类对象。我想知道以下两个类赋值运算符之间的主要区别是什么 Point Point::operator=(const Point & p) { if(this == &p) return *this; m_x = p.m_x; m_y = p.m_y; return *this; } 这个呢 Point & Point::operator=(const Point & p) {

我试图理解如何实现类对象。我想知道以下两个类赋值运算符之间的主要区别是什么

Point Point::operator=(const Point & p)
{
    if(this == &p)
        return *this; 
    m_x = p.m_x;
    m_y = p.m_y;

    return *this;    
}
这个呢

Point & Point::operator=(const Point & p)
    {
        if(this == &p)
            return *this; 
        m_x = p.m_x;
        m_y = p.m_y;

        return *this;    
    }
我可以看到,后一个返回一个对象的引用,但我看不出任何实际的区别。例如,当我尝试这样做时,这两种方法都很好:

Point point2, point3;
point3 = point2 = point1;

确定的可能重复,这很有用,谢谢。第一个会生成一个额外的副本。另外:这两个赋值运算符都是无效的、未定义的行为。仅当两个类实例都是同一数组/向量的成员时,才定义将一对原始指针与类实例进行比较。在几乎所有的C++实现中,任何这种类型的指针比较都会产生预期的结果,但是这在技术上是不可移植的、无效的C++。