在C 中,函式名前的const和函式名後的const有區別嗎

時間 2021-08-30 10:37:16

1樓:匿名使用者

有區別。

首先要知道函式名後面加const只能用於成員函式。

int const func(); //合法,相當於const int func();

int func2() const; //非法,對函式的const限定詞只能用於成員函式

在成員函式中,const加在函式名前和後也是有區別的。

例如:class a ;

int const a::func()

int a::func() const

上面的**是合法的,其中a::func成員函式是一個過載成員函式,兩個函式都返回int型別資料(注意:對於c/c++,返回型別或引數型別中,const int和int被認為是一種型別。

但是const int *和int *不是一種型別),這兩個過載函式正是基於函式名後的const來過載的。

int const func();表示該成員函式的隱藏this指標引數是a * const型別的;而int func() const;表示該過載成員函式的隱藏this指標引數是a const * const型別的.

a * const型別和a const * const型別是不同型別,因此可以過載。

由此可見const放在函式名後和名前是不同的

2樓:匿名使用者

const int *a; 指向的變數不可修改 指標可修改

int *consta; 指向的變數值可變 指標不可改變

看const在*的 左面還是右面

請問c++中const加在型別名前和變數名前的區別??????

3樓:匿名使用者

const是用來宣告一個bai常量的

du,當你不想讓一個zhi值被改變時就用daoconst,const int max && int const max 是沒有區別的內,都可以。

不涉容及到指標const很好理解。

涉及到指標的情況:

int b=100;

const int * a=&b [1];

int const *a=&b; [2]int* const a=&b; [3]const int* const a =&b; [4]

如果const位於星號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;如果const位於星號的右側,const就是修飾指標本身,即指標本身是常量。因此,[1]和[2]的情況相同,都是指標所指向的內容為常量(const放在變數宣告符的位置無關),這種情況下不允許對內容進行更改操作,如不能*a = 3 ;[3]為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身進行更改操作,如a++是錯誤的;[4]為指標本身和指向的內容均為常量。

c語言中在結構體中name函式名什麼意思

這裡的name變數不是普通資料型別,是一個函式指標。1 函式指標是指向函式的指標變數。因而 函式指標 本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數 字元型 陣列一樣,這裡是指向函式。c在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向...

c中指向函式的指標初始化和使用,請教C 中函式型指標和指標型函式的用法和區別,謝謝

牽著你的手 c 指向函式的指標定義方式為 返回型別 指標名 函式引數列表 例如 void p int 是指向一個返回值為void 引數為int型別的函式。而若想定義一個指向類成員函式的函式指標該怎麼定義呢?對成員函式指標的使用。1 非靜態成員函式 定義方式 返回型別 類名 指標名 函式引數列表 例如...

c 中兩個函式函式名相同,引數型別和引數個數也相同,但是函式型別不同,那它們是過載函式嗎

函式過載只看引數個數和型別 所以如果只是返回值相同的函式就不是過載函式了 莊政警 這樣不是過載。函式過載要求函式的引數個數不同或者引數型別不同。因為呼叫函式的時候無法確認函式的返回型別,所以僅返回型別不同的函式都可以匹配,這樣就造成二義性,所以僅僅是返回型別不同是不能過載的,比如有int f int...