1樓:網友
和區域性變數沒區別。加了就會有點東西編譯器不讓你改。
c++,函式形參中的const - const可以這麼寫嗎?
2樓:網友
const修飾符放在型別的前面或後面都是同樣效果的。一般習慣是放在前面,例如vc2012的list檔案,寫法也是這樣的:list(const _myt& _right)。
舉例:const char *p; // 編譯器保護的是*p,而不是p。
char * const p = "ok"; // 編譯器保護的是p,而不是*p。接下來*p = 'a';這樣的語句也可以編譯通過。
char const *p; // 和const char *p的寫法完全等效。
3樓:網友
注意修飾的物件就可以了。
c++中函式的const引數一定要傳入const實參嗎?
4樓:網友
在vs2008c/c++程式,**示意如下:
int main()
func1定義為void func1(const char *c1);
在編譯工程選項裡選擇作為c++程式編譯,就會出錯,cannot convert parameter 1 from 'unsigned char *' to 'const char *'
c++中函式的const引數不一定要傳入const實參。
要注意unsinged char、signed char、char在c++中是不同的三種型別,char的算術運算結果類似unsigned還是signed,由實現(編譯器)決定。
iso c允許不同型別指標的隱式轉換,包括引數傳遞時實參向形參型別的轉換。但是iso c++對於型別檢查更嚴格,必須使用顯式的型別轉換。所以在此表示式func1((const char *)ch1)可以通過編譯,而func1(ch1)會導致編譯錯誤,並不是const的原因。
對於修飾指標指向型別的const來說,一般不允許隨意轉換const char*為char*(如果要轉換必須用const_cast或c風格顯示型別轉換(char*);反過來可以,strcmp接受const char*引數,因此這裡可以隱式轉換)。不過對char而言有個deprecated(以後可能不被標準支援)的用法,可以用字面量const char*指標隱式轉換為char*指標,用於相容char *p = "abc";之類的舊**。
5樓:
當然不可以,因為你宣告的變數ch1 為unsinged char 型,是可以更改記憶體資料的,而func1宣告的是const型,不可以改變資料的,所以必須型別轉換。
6樓:網友
對於ansi c/c++來說,如果形參型別不一致,必須採用強制轉換。
具體就看編譯器實現的時候是否嚴格遵照ansi的要求了。
至少vc60對上面的要求很寬鬆,vs2008可能反而嚴格一些。
7樓:網友
不能執行:const char *c1:指向常量的指標,而ch是變數,能執行:(const char*)c1就變成了常指標,即c1只能指向乙個變數ch,而不管ch是什麼,你改成引用也能執行。
8樓:網友
問題不在於const
而是unsigned char無法轉換為char
c++如果函式形參是const指標,那它的返回值是不是隻能是const指標而不能是普通的指標
9樓:銀雯
const指標就是為了不讓你改他形參的值,你賦值給普通指標不就可以改它的值了?你是要做什麼功能?一般的話用傳值就行了,指標之間賦值的操作比較危險。
10樓:網友
可以賦值的啊,只是const變數本身不能修改而已,但肯定可以被copy成乙個非const指標的副本的,之後對這個const指標的副本操作雖然很危險,但不至於不會不給你賦值。
11樓:網友
1.如果你的返回值型別是const,那你左值應該是const,當然也可以通過 const_cast 去除返回值的const 標示符,這樣左值就可以不是const型別了。
2. 看你說陣列,那麼你可以返回乙個 索引(陣列下標),然後操作。
12樓:董不懂
const只是表示不允許修改,沒有其他的語法限制。
point getcircum() const 裡的const加在函式後面是什麼作用?
13樓:網友
類的成員函式後面加 const,表明這個函式不會對這個類物件的資料成員(準確地說是非靜態資料成員)作任何改變。
在設計類的時候,乙個原則就是對於不改變資料成員的成員函式都要在後面加 const,而對於改變資料成員的成員函式不能加 const。所以 const 關鍵字對成員函式的行為作了更加明確的限定:有 const 修飾的成員函式(指咐並 const 放在函式參數列的後面,而伍唯不是在函式前面或者參數列內),只能讀取資料成員,不能改變資料成員;沒有 const 修飾的成員函式,對資料成員則是可讀可寫的。
在類的成員函式後面加 const ,則常量(即 const)物件可以呼叫 const 成員函式衡橘跡,而不能呼叫非const修飾的函式。正如非const型別的資料可以給const型別的變數賦值一樣,反之則不成立。
對於const成員函式,"不能修改類的資料成員,不能在函式中呼叫其他不是const的函式",這是由const的屬性決定的。
c++中乙個類如果有const和非const的相同名稱的函式,形參也一樣,怎麼呼叫?
14樓:網友
看你呼叫的物件的型別,要是是const的,那麼就是呼叫的是const的函式。
要是物件不是const的型別就呼叫非const的函式。
你可以程式設計自己感受感受。
const 成員函式為什麼可以呼叫指標成員變數的非const函式?
15樓:幻夢·人生
類a裡的成員,有m_pvt
const修飾函式之後,意思是不能夠修改m_pvt也就是不能將他指向其他的位置。
m_pvt->push_back(1);
這行語句修改的是m_pvt裡面所存的位址所指向的空間並不修改m_pvt,所以不違反const原則就好像你宣告乙個int * const p = a;
你不能修改p的值,但是你可以修改*p的值。
16樓:senlern林
我記得應該是非const物件無法呼叫const函式吧,因為const函式說明不會修改呼叫它的物件裡面的東西。至於const函式呼叫什麼樣的函式沒影響吧~你再試試,自己做做實驗。希望您能幫到你~
17樓:網友
void f() const;
const 保證會不修改 m_pvt,但是*m_pvt就管不了了。*m_pvt不屬於a類成員。
c++中有const 非成員函式嗎(該函式不是類的成員,僅是普通函式)?
18樓:
1全部在函式上,const就是隻對成員函式有那麼一種約束作用,其他地方是沒意義的,也是不行的。
19樓:雲海鷹影
沒有,也沒有用,你放個const後面做什麼呢?
c++ 類成員函式加限定符是為了限制函式對物件成員資料的修改,特別是const 物件。
想要不改變傳入的引數,引數前面用const 限定符就好了。
20樓:z鬼迷心竅
類外沒見過 但感覺可以用 上機試下。
函式形參列表,c 函式形參列表中 account 是什麼意思 為什麼 在後面
void fn int a1,int a2 這裡 變數名 不能為a1或a2,即不能與形參列表中的名字同名。在excel中常用函式的引數有哪些?選單 插入 函式 你可以檢視常用函式。如下圖所示 c語言自定義函式中引數列表前定義變數型別有什麼用 首先你要明白不抄同的型別之間不bai能直接進行運算的.如果...
python中怎麼在函式內呼叫另外函式類
1,如果呼叫在另外一個.py裡面的函式,先匯入 py,然後呼叫2,如果在本py裡面,則把要呼叫的函式放在前面,直接呼叫,例如 def sum a,b return a b c sum 5,6 如果是同一包裡面,直接就可以使用,如果不是同一個包,那麼需要先import後,通過 包名.類名 才能使用。下...
C中無參建構函式的使用問題,C 中通過無參建構函式來呼叫有參建構函式有什麼意義啊?
原因有二 第一 每個類裡面都有一個預設的無參的建構函式 這個是有條件的 如果你不手動新增有參的建構函式,則編譯時會自動新增一個無參建構函式,但是如果你手動新增了一個有參的建構函式,這個 預設的無參建構函式 就不會自動新增,這時候如果你還想呼叫無參的建構函式,只能手動寫一個無參的建構函式,第二 預設的...