考虑以下代码:
class Test
{
public:
//1
int kon1() const;
//2
const int kon2();
//3
static int kon3();
};据我所知,职能1与职能2的区别在于:
(如果我理解错了,请纠正我)
我的问题是:正如我们所看到的那样,如果我们想使一个函数成为const函数,那么关键字就放在后面。但是为什么在函数3中,静态函数,静态关键字放在前面?
发布于 2014-04-03 08:07:08
对于const,成员函数必须在之后使用const关键字,以避免与返回类型有歧义。
对于static、virtual和其他对函数的工作方式有显著影响的关键字,最好先列出它,以便在类定义中更容易看到。例如,我们可以快速扫描成员函数的列表,并发现所有的static函数或所有的virtual函数--这有助于我们理解函数的总体使用情况。
标记成员函数const (或override)是一个不那么重要的区别--如果您有一个非const对象,您可以调用函数,无论它们是否为const,在阅读开发人员吸收函数返回类型和标识符时,适当的const-ness通常是显而易见的,而在一些公司/项目编码标准中,突变函数分组在const-accessors之上,或者相同成员函数的const和非const版本并排强调它们的相似之处--那么差异const-ness就更加突出了。
所有这些因素结合在一起,使C++中的实际选择成为开发的最佳选择,但您正确地注意到它们有一点不一致。
发布于 2014-04-03 06:37:57
关键字static不会修改变量的类型。它修改它所处的内存地址。它同样用于函数类型变量和数据类型变量:
static int n; // data
static int n (); // function关键字const确实修改了变量的类型。对于函数类型变量,这个关键字有两个可能的含义:
const类型:
const ();//函数只能从非const对象调用,并返回一个const值。发布于 2014-04-03 06:49:20
您正在混合两个概念,即存储类和存储类型。
C++有以下几种存储类
自动,寄存器,静态,外部和可变的
以及以下类型的存储类型(基于您在存储上可以做什么)
只读(可以初始化)->这是const
读和写->这是非康斯特。
所以,当你定义一个变量/函数时,你必须事先告诉你要关联哪种存储类型。这就是为什么你把静态作为第一个关键字在你的代码。
希望这能有所帮助。
https://stackoverflow.com/questions/22829090
复制相似问题