c++入门之——const在函数名前面和函数后面的区别

1 class Test(){
2 public:
3     Test(){}
4     const int foo(int a);
5     const int foo(int a) const;
6 };

一、概念

当const在函数名前面的时候修饰的是函数返回值,在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作。

二、原理:

我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变this所保存的地址,this的类型是一个指向const类型对象的const指针。

三、Overload时const的作用:

继续使用上面的test类:

1 int main(int argc, _TCHAR* argv[])
2 {
3     Test obj;
4     const Test obj1;
5     obj.foo(3);//使用非const函数
6     obj1.foo(3);//使用const函数
7 }

在VS中如果对象不是const,则调用非const的函数。

本文转载自:

https://blog.csdn.net/lichen18848950451/article/details/64123104

原文地址:https://www.cnblogs.com/shaonianpi/p/9906076.html

时间: 2024-10-05 05:04:57

c++入门之——const在函数名前面和函数后面的区别的相关文章

Delphi 调用C/C++的Dll(stdcall关键字, 会导致函数名分裂. 此时函数名变成[email protected])

delphi调用C++写的Dll, 当然这个Dll要求是非MFC的Dll, 这样子才能被delphi调用. 根据C++定义函数的情况, Delphi有不同的相对应的处理方法.1. 声明中不加__stdcall,采用VC默认格式__cdecl,但在Delphi中要注明调用格式为cdecl.C++中例子: [cpp] view plain copy print? extern "C" int __declspec(dllexport) add(int x, int y); Delphi中例

函数名以和函数指针

调用时:(*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的. 1 void MyFun(int x);//此处的申明也可以写成:void MyFun(int); 2 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样. 3 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 MyFun(10);//这是直接调用MyFun函数 7 FunP = MyFun;//将My

delphi通过函数名动态调用函数的方法

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyCacl = class(TObject) public { Public declarations } function DynamicFun(funName: string; const a, b: integer): integer;

php函数名前添加& 函数的引用返回

function &test(){ static $b=0; $b= $b+1; return $b; } $a= test(); echo $a,"\n"; $a = 3; $a= test(); echo $a,"\n"; $a = &test(); echo $a,"\n"; $a= 10; $a= test(); echo $a,"\n"; 结果: test()函数引用返回就是   $a 引用$b  

依据函数名字符串执行函数

这个问题虽然不是很严重,但却困扰本人许久.曾经多方询问朋友.查阅资料均无法达到效果. 今日偶然查到一些东西,经实测的却可行,也算了却了一桩心愿. 不再废话直接贴DEMO代码 1 unit Unit2; 2 3 interface 4 5 uses 6 Vcl.Dialogs, Vcl.Forms, System.Generics.Collections, System.Variants; 7 8 type 9 TMyIntf = class(TForm) 10 public 11 class f

"函中函" -------------------- func2(func) -------------- 函数名可以当做函数的参数

def func(): print("吃了么")def func2(fn): print("我是func2") fn() # 执?传递过来的fn # 即 fn替换成func, 即执行fn() print("我是func2")func2(func) 原文地址:https://www.cnblogs.com/jack20181017/p/9893035.html

python入门基础-三元表达式、命名空间、作用域、函数名本质、闭包

1.三元表达式(三目运算式) #1 三元表达式(三目运算法) #格式为: 为真时的结果 if 判定条件 else 为假时的结果 #另外三元表达式只适合较为简洁的条件判定,较为复杂的判定建议不要用这种方式写代码,因为比较让他人难以理解. a = 10 b = 15 compare = a if a > b else b #谁大返回谁 print(compare) 2.命名空间(namespace) #2 命名空间(namespace) #命名空间是名称和对象的印象,也可以将命名空间理解成一个字典,

C++ 编译器的函数名修饰规则

C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置. 多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们.当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中, 为了让LINK程序或其他工具能够匹配到正确的函数名字,就必须为重载函数和一些特殊的函数(如

【转载】C++ 编译器的函数名修饰规则

转载自:http://mxdxm.iteye.com/blog/510486 C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置.多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们.当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中,为了让LINK程