2

以下所有声明都相同吗?如果是这样,声明常量函数的标准方法是什么?

const SparseMatrix transpose();

SparseMatrix transpose() const;

const SparseMatrix transpose() const;
4

3 回答 3

7

函数名左边的 const 表示返回的对象不能修改。右侧的 const 表示该方法是类的一部分,并且不修改其任何数据成员。除非或当然它的任何数据成员是用关键字声明的,在这种情况下,尽管有保护,mutable但仍允许对其进行修改。const

const当函数的返回类型是非指针类型时,关键字的位置并不重要:

 T const f(); // same as const T f();

但是,请注意,const在使用指针作为返回类型时,关键字的位置很重要。例如:

const T* f();

此方法返回一个指向 const 的指针T。也就是说,它指向的东西是不可变的。因此,您不能通过取消引用返回的指针来进行赋值:

T* x = f();

*x = y; // error: assignment of read-only location '*(const T*)x'

当 const 放在返回类型(即指针)的右侧时,表示指针是 const 且不能更改。

T* const f();

int main()
{
    T* x const;

    x = f(); // error: assignment of read-only variable 'x'
}

此外,如果我们const在指针的两侧都有返回类型,并且const表示“不修改类成员”,那么它读作如下:

const T* const f() const;

一个名为的 const 成员函数f,它返回一个指向 const 的 const 指针T

于 2013-01-15T23:35:29.627 回答
4

第一个将返回一个SparseMatrixconst 且不能更改的值。

第二个声明了一个返回 a 的函数,SparseMatrix并确保该函数不会更改任何类变量(假设它是一个成员函数,否则对于这种减速没有意义),除了可变成员。

最后一个两者兼而有之。

于 2013-01-15T23:36:19.790 回答
0

1) 返回一个 const 值 2) const 函数,内部没有成员变化 3) 1)+2)

于 2013-01-16T02:30:35.237 回答