ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C常量函数声明的变体?

2019-10-12 01:08:58  阅读:512  来源: 互联网

标签:c



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

const SparseMatrix transpose();

SparseMatrix transpose() const;

const SparseMatrix transpose() const;

解决方法:

函数名称左侧的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;

A const member function named f that returns a const pointer to a const T



标签:c

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有