C 引數中不加const為什麼會出錯

2021-09-12 00:09:54 字數 1250 閱讀 2141

1樓:匿名使用者

過載二維運算子的函式引數需要const,因為函式要保證實參的值不能被修改,需要加const限制,沒有為什麼,就是需要。

另外你寫的函式宣告也有問題,應該是這樣

使用成員函式過載加號運算子

使用友元函式過載減號運算子

我個人習慣將*、&符號靠近變數名,而不是型別名,寫乙個例子你就明白了int *p1, p2;

p1是指標,p2不是,把*號靠近int也是這樣。

2樓:匿名使用者

#include "stdafx.h"

class pointa

pointa(pointa& p)

pointa operator+(const pointa& p);//使用成員函式過載加號運算子

friend const pointa operator-(const pointa& p1, const pointa& p2);//使用友元函式過載減號運算子

};pointa pointa::operator+(const pointa& p)

pointa const operator-(const pointa& p1, const pointa& p2)

int _tmain(int argc, _tchar* ar**)

為什麼我寫的乙個c++中類的複製建構函式的引數一定要加const??

3樓:匿名使用者

語句complex c3 = c1 + c2;中的c1 + c2的結果是乙個臨時變數(右值),在c++03中,只有const引用才能夠引用右值。

所以加上const限定符有以下好處:既可以從const和非const左值複製構造,也可以從const和非const右值複製構造。

4樓:匿名使用者

當程式設計師正確工作時, 不論加不加const,都不會也不應該同時修改被拷貝的物件。

但若是不加const, 程式設計師是可以修改被拷貝的物件的,因此為了防止程式設計師犯錯誤,就要加上這個限制。它和另乙個設計思想在思路上有共通之處:可以私有化的資料和函式,就一定要私有化。

5樓:

因為宣告的構造方法已經存在,所以複製建構函式只能為唯讀,所以必須加cunst.

go home中為什麼不加 to

因為這裡的home不是名詞,而是 副詞 是 到家 向家 在家 的意思。go home就是向著家前行。因為home不是名詞,而是副詞,就是去修飾go這個動詞的,所以就不用加to了。再強調一下 加to是因為,後面要跟名詞,而go又是不及物動詞 不能直接跟名詞 home在這裡是副詞,副詞前不加介詞 就像g...

在java中為什麼有些方法後面不加括號而有的就必

你好,不加括號的 應該是變數名吧或者是封裝的型別 interger是基本型別int的封裝類,parseint string str 方法是將括號裡面的字串資料轉化成int型別 integer 類在物件中包裝了乙個基本型別 int 的值 java中只要是加括號的肯定是方法,不帶括號的是變數 你在說詳細...

為什麼C中常用按位異或的方式改變引數本身

位運算比邏輯運算快 就像整數除以2一般寫作右移一位 以效率著稱的c.c 這些還是很講究的 尤其在晶元裡 c 語言中按位異或賦值是什麼意思 c 中資料一般都是按照多少位元組來儲存的,而我們知道乙個位元組是有8位,記憶體中每一位要麼是1要麼是0,邏輯運算異或的運算法則為a異或b a b或ab a 為非a...