C++ c++;-函数头中const和static关键字之间的差异
考虑以下代码:C++ c++;-函数头中const和static关键字之间的差异,c++,static,constants,qualifiers,C++,Static,Constants,Qualifiers,考虑以下代码: class Test { public: //1 int kon1() const; //2 const int kon2(); //3 static int kon3(); }; 据我所知,函数1和函数2的区别在于: 函数1表示该函数将无法更改任何数据成员的值 函数2表示它将返回一个常量int (如果我有错误的理解,请纠正我) 我的问题是: 正如我们在这里看到的,如果我们想让一个函数成为const函数,const关键字就放在后面。但是为
class Test
{
public:
//1
int kon1() const;
//2
const int kon2();
//3
static int kon3();
};
据我所知,函数1和函数2的区别在于:
正如我们在这里看到的,如果我们想让一个函数成为const函数,const关键字就放在后面。但是为什么在函数3,静态函数中,静态关键字放在前面?关键字
静态
不会修改变量的类型。它修改它将位于的内存地址。对于函数类型变量和数据类型变量,其使用方式相同:
static int n; // data
static int n (); // function
关键字const
会修改变量的类型。对于函数类型变量,该关键字有两种可能的含义:
const
:
常量int n();//函数只能从非常量对象调用,并返回常量值您混合了两个概念,即存储类和存储类型 C++有以下类型的存储类 自动、注册、静态、外部和可变 以及以下类型的存储类型(基于您可以在存储上执行的操作) 只读(可初始化)-->这是常量 读写-->这是非常量 因此,当你定义一个变量/函数时,你必须提前告诉你想要关联的存储类型。这就是为什么在代码中把static作为第一个关键字
希望这有帮助。对于
const
成员函数必须在之后使用const
关键字,以避免返回类型的歧义
对于静态
、虚拟
和其他对函数工作方式有显著影响的关键字,最好先列出它,以便在类定义中更容易看到。例如,我们可以快速浏览成员函数列表,并找出所有静态
函数或所有虚拟
函数,这有助于我们了解函数的总体使用情况
标记成员函数const
(或例如重写
)是一个不太重要的区别-如果您有一个非const
对象,您可以调用函数,无论它们是否const
,当阅读开发者吸收函数返回类型和标识符时,适当的const
-ness通常对他们来说是显而易见的,并且在一些公司/项目编码标准中,变异函数被分组在const
-accessor上方,或者同一成员函数的const
和非const
版本并排强调它们的相似性-然后不同的const
-更加突出
所有这些因素结合起来,使C++中的实际选择成为最佳的开发,但你观察到它们有点不一致是正确的。
int kon1() const;
此函数为只读函数,仅用于常量数据
const int kon2();
此函数可以处理可修改对象,但它返回的类型为只读,调用方无法修改此类型。因为语言就是这样定义的吗?(具体来说,这是从C继承的。)函数1表示变量或对象的状态都不应该改变,但它可以改变可变变量的状态。您的代码回答了您自己的问题-它不能在前面,或者您无法区分返回的
常量
函数int
和返回的非常量
函数之间的区别const int
。这些选择看起来真的很武断。。。e、 g.virtual
在前面,而override
在后面……@OliCharlesworth我知道格式已经定义好了,但我对此并不满意answer@TonyD谢谢你澄清我的理解,但我要问的是函数1、2、3之间的区别,在我的问题中是粗体的:)在第二点“只能从const对象调用函数”。我认为这可能会让人困惑,或者我的概念不清楚。我认为它可以从未声明为const的对象调用。只有它将充当const对象,因为除了可变变量外,该函数内没有成员变量可以修改。它不会“修改内存地址”。在函数中使用时,它会修改对象的生存期。在函数外部使用时,它会修改对象或函数的可见性。