2

考虑以下代码:

class Test
{
public:
   //1
   int kon1() const;

   //2
   const int kon2();

   //3
   static int kon3();
};

据我所知,功能1和2之间的区别在于:

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

(如果理解有误,请指正)

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

4

4 回答 4

3

对于const成员函数,后面必须有const关键字,以避免与返回类型产生歧义。

对于static,virtual和其他对函数的工作方式有显着影响的关键字,最好先列出它,以便在类定义中更容易看到。例如,我们可以快速浏览成员函数列表并找出所有static函数或所有函数virtual- 帮助我们了解函数的整体使用。

标记一个成员函数const(或例如一个override)是一个不太重要的区别——如果你有一个非const对象,你可以调用函数,不管它们是否const存在,适当的const-ness 对于阅读开发人员来说通常是显而易见的,因为它们吸收了函数返回类型和标识符,并且在某些公司/项目编码标准中,变异函数被分组在const访问器之上,或者同一成员函数的constconst版本并排以强调它们的相似性——然后差异const更加突出。

所有这些因素结合起来,使 C++ 中的实际选择最适合开发,但您观察到它们有点不一致是对的。

于 2014-04-03T08:07:08.100 回答
0

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

C++ 有以下几种存储类

自动、注册、静态、外部和可变

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

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

读写 --> 这是非常量的。

所以当你定义一个变量/函数时,你已经提前告诉你想要关联什么样的存储类型。这就是为什么你把静态作为你的代码中的第一个关键字。

希望这可以帮助。

于 2014-04-03T06:49:20.460 回答
0
 int kon1() const;

此函数是只读函数,仅适用于 const 数据。

   const int kon2();

这个函数可以在可修改的对象上工作,但它返回的类型是只读的,调用者不能修改它。

于 2014-04-03T12:09:31.533 回答
0

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

static int n;     // data
static int n ();  // function

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

  1. 将函数的返回值修改为 type const

    常量 int n (); // 函数只能从非 const 对象调用,并返回一个 const 值

  2. 修改如何调用此函数

    int n () 常量;// 函数可以被 const 和 non-const 对象调用,并返回一个 non-const 值`

于 2014-04-03T06:37:57.157 回答