首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ -函数头中const关键字和静态关键字的区别

c++ -函数头中const关键字和静态关键字的区别
EN

Stack Overflow用户
提问于 2014-04-03 06:03:12
回答 4查看 2.5K关注 0票数 2

考虑以下代码:

代码语言:javascript
复制
class Test
{
public:
   //1
   int kon1() const;

   //2
   const int kon2();

   //3
   static int kon3();
};

据我所知,职能1与职能2的区别在于:

  1. 函数1表示该函数无法更改任何数据成员的值。
  2. 函数2表示它将返回一个const。

(如果我理解错了,请纠正我)

我的问题是:正如我们所看到的那样,如果我们想使一个函数成为const函数,那么关键字就放在后面。但是为什么在函数3中,静态函数,静态关键字放在前面?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-03 08:07:08

对于const,成员函数必须在之后使用const关键字,以避免与返回类型有歧义。

对于staticvirtual和其他对函数的工作方式有显著影响的关键字,最好先列出它,以便在类定义中更容易看到。例如,我们可以快速扫描成员函数的列表,并发现所有的static函数或所有的virtual函数--这有助于我们理解函数的总体使用情况。

标记成员函数const (或override)是一个不那么重要的区别--如果您有一个非const对象,您可以调用函数,无论它们是否为const,在阅读开发人员吸收函数返回类型和标识符时,适当的const-ness通常是显而易见的,而在一些公司/项目编码标准中,突变函数分组在const-accessors之上,或者相同成员函数的const和非const版本并排强调它们的相似之处--那么差异const-ness就更加突出了。

所有这些因素结合在一起,使C++中的实际选择成为开发的最佳选择,但您正确地注意到它们有一点不一致。

票数 3
EN

Stack Overflow用户

发布于 2014-04-03 06:37:57

关键字static不会修改变量的类型。它修改它所处的内存地址。它同样用于函数类型变量和数据类型变量:

代码语言:javascript
复制
static int n;     // data
static int n ();  // function

关键字const确实修改了变量的类型。对于函数类型变量,这个关键字有两个可能的含义:

  1. 将函数的返回值修改为const类型: const ();//函数只能从非const对象调用,并返回一个const值。
  2. 修改如何调用此函数 int () const;//函数可以被调用const和non对象,并返回一个非const值
票数 0
EN

Stack Overflow用户

发布于 2014-04-03 06:49:20

您正在混合两个概念,即存储类和存储类型。

C++有以下几种存储类

自动,寄存器,静态,外部和可变的

以及以下类型的存储类型(基于您在存储上可以做什么)

只读(可以初始化)->这是const

读和写->这是非康斯特。

所以,当你定义一个变量/函数时,你必须事先告诉你要关联哪种存储类型。这就是为什么你把静态作为第一个关键字在你的代码。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22829090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档