什么是&;重载中的算子平均 我正在读一本C++书。 该程序尝试生成对象的向量。 这是我不明白的部分 class X { public: X(); X(int m) { temp = x; } int temp; X &operator =(int z) { temp = z; return *this; } private : // Some functions here }

什么是&;重载中的算子平均 我正在读一本C++书。 该程序尝试生成对象的向量。 这是我不明白的部分 class X { public: X(); X(int m) { temp = x; } int temp; X &operator =(int z) { temp = z; return *this; } private : // Some functions here },c++,class,stl,vector,overloading,C++,Class,Stl,Vector,Overloading,这条线是什么意思? 这是某种超载吗? 那怎么办呢?我假设你有一个打字错误,而这一行实际上是这样写的: X &operator =(int z) { &表示返回类型是一个参考;您应该将其理解为函数operator=,它返回一种类型的X&它是X&operator=(intz)我认为,也就是说,=运算符的重载接受一个int并返回一个对X的引用。可能,您的代码应该是这样的: class X { public: int temp; private : //Some functio

这条线是什么意思? 这是某种超载吗?
那怎么办呢?

我假设你有一个打字错误,而这一行实际上是这样写的:

X &operator =(int z) {

&
表示返回类型是一个参考;您应该将其理解为函数
operator=
,它返回一种类型的
X&
它是
X&operator=(intz)
我认为,也就是说,=运算符的重载接受一个int并返回一个对X的引用。

可能,您的代码应该是这样的:

class X {
public:
    int temp;
private :
    //Some functions here 
    X &operator =(int z) 
    {
        temp = z; 
        return *this ;
    }
};
然后处理
操作符=
,而不是
操作符


您的
运算符=
返回对其应用到的对象的引用。

如果稍微更改间距,含义可能会更清楚:

X& operator= (int z)
这是赋值运算符的重载,
operator=
,它接受一个
int
参数,并返回对
类X
的引用

可以使用它为对象指定整数值:

X x;
x = 42; // calls the overloaded operator
返回值允许您链接分配:

X x1,x2;
x1 = x2 = 42;   // equivalent to `x2 = 42; x1 = x2;`
(x1 = x2) = 42; // equivalent to `x1 = x2; x1 = 42;`

这是赋值运算符的定义::它的格式可能更好,如下所示(越界定义):

它允许您编写如下内容:

X a, b, c(10);
a = b = c;
每个赋值子表达式的值都是对受让人的引用

运算符需要在类定义中声明,当然:

class X
{
public:
    X & operator=(int);
    // ...
};

这意味着:C*和C++允许你像这样做分配< < /P>

((x = 4) = 3) = 2;
其结果是,
x
的值为2:
x
首先设置为4,然后设置为3,然后设置为2(看起来不是很有用,但这种变化可能会产生很好的速记表达式)。要使其发挥作用,需要在下面执行以下操作:

x = 4;
X& x2 = x;  // reference to x, so that it can be modified without explicitly writing x
x2 = 3;     // since x2 is just an alias, the variable that's actually changed is x
X& x3 = x2; // again, x2 just refers to x, so now x3 also does
x3 = 2;     // yet again, modifies x


*在C中,它当然不适用于引用,但结果是相同的。

请检查您的代码。我确信那本书中的程序看起来不是这样的,因为它永远不会编译。我对代码进行了适当的修改,使其变得适口,这意味着它是一种运算符重载@RahulRai:据我所知,这段代码中任何地方都没有涉及重载。@Mooing:反正它被称为“运算符重载”,因为你重载了类类型的
x=y
的基本含义。当然,如果
operator=
按值返回,这种链接也会起作用。@leftaroundabout:是的,如果类是可复制的。带有复制赋值运算符的不可复制类会很奇怪。@leftaroundabout:确实如此,但这不是复制赋值运算符;它是从不同类型分配的。无论如何,为了完整性,我添加了一种确实需要非
const
引用的链接。
x = 4;
X& x2 = x;  // reference to x, so that it can be modified without explicitly writing x
x2 = 3;     // since x2 is just an alias, the variable that's actually changed is x
X& x3 = x2; // again, x2 just refers to x, so now x3 also does
x3 = 2;     // yet again, modifies x