1. 程式人生 > >c++入門之——const在函數名前面和函數後面的區別

c++入門之——const在函數名前面和函數後面的區別

obj 常成員函數 main con [] 我們 article 如果 編譯

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

c++入門之——const在函數名前面和函數後面的區別