1樓:高質量團賽
在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";之類的舊**。
2樓:樂vov樂
庫函式中有一個 swap()函式,
你自定義了一個swap函式,但是引數是常引用型別的,程式呼叫swap函式時,會根據傳進來的引數進行判斷呼叫。
你這個程式主函式中呼叫的實際是系統的swap庫函式,所以實現了交換功能。
3樓:相思丶貓
你的swap根本沒有交換這2個值。還有,既然交換,用const就是錯的。
4樓:匿名使用者
你把swap函式的名字換一下就不是了
swap是有庫函式的,你實際上調的是庫中的swap函式
c++中的常引用是怎麼回事?
5樓:倫落校園
一個變數的引用就是變數的別名。實質上,變數名和引用名都指向同一段記憶體單元。如果形參為變數的引用名,實參為變數名,則在呼叫函式進行虛實結合時,並不是為形參另外開闢一個儲存空間(常稱為建立實參的一個拷貝),而是把實參變數的地址傳給形參(引用名),這樣引用名也指向實參變數。
例如:#include
using namespace std;
class time
;time::time(int h,int m,int s)
形參t是time類物件的引用
int main()
//這裡類物件t1裡的minute值本來為13,但通過引用修改了實參t1裡的值,使其變為18
如果不希望在函式中修改實參t1的值,就可以把引用t宣告為const引用(常引用),函式原型為
void fun(const time &t);
則在函式中不能改變t的值,也就是不能改變其對應的實參t1的值。
在c++物件導向程式設計中,經常用常指標和常引用作函式引數。這樣既能保證資料安全,是資料不能被隨意修改,在呼叫函式時又不必建立實參的拷貝。
c++函式形式引數是string型別的常引用時,怎麼正確傳入引數?
6樓:山西優就業
string str;
對於函式fun(char *,xx,.....)使用fun(str.c_str(),xx,....)可把string型別傳入char*型別的函式引數中。
string是c++程式語言中的字串。 string類是不可變的,對string類的任何改變,都是返回一個新的string類物件,而char *是c語言中的字元指標,兩者進行相應的轉換,即可進行專遞。
7樓:璐人釔
常引用?
可以直接傳入字串,例如fun("abcd");
也可以傳string,例如string str="abcd";fun(str);
c++引用的常引用
8樓:俎瑰瑋
常引用宣告方式:const 型別識別符號&引用名=目標變數名;
用這種方式宣告的引用,不能通過引用對目標變數的值進行修改,從而使引用的目標成為const,達到了引用的安全性。
【例】:
int a ;
const int &ra=a;
ra=1; //錯誤
a=1; //正確
這不光是讓**更健壯,也有些其它方面的需要。
【例】:假設有如下函式宣告:
string foo( );
void bar(string & s);
那麼下面的表示式將是非法的:
bar(foo( ));
bar("hello world");
原因在於foo( )和"hello world"串都會產生一個臨時物件,而在c++中,這些臨時物件都是const型別的。因此上面的表示式就是試圖將一個const型別的物件轉換為非const型別,這是非法的。
引用型引數應該在能被定義為const的情況下,儘量定義為const 。
c++中,常引用的目的是什麼,為什麼不直接用引用 30
9樓:匿名使用者
常引用一般用在函式引數中,最大的好處是可以傳送地址提高效率,卻不用擔心變數被修改。
比如:int fun(const obj &m)
如果不用const,則m可能被修改,如果不用引用,則對於結構型別的引數傳遞效率可能較低。
10樓:兩腳踏四船
常引用的作用就是防止通過這個引用修改所繫結物件的值,因為用引用的話就可以直接通過引用修改物件的值。
C陣列的引用做函式引數怎麼寫,c 中關於陣列作為函式引數的幾種方法
陣列名作函式引數 陣列名可以作函式的實參和形參。如 12 3456 78910 11main f int arr,int n array為實引數組名,arr為形引數組名。在學習指標變數之後就更容易理解這個問題了。陣列名就是陣列的首地址,實參向形參傳送陣列名實際上就是傳送陣列的地址,形參得到該地址後也...
c中函式引數指什麼?如何給函式的引數賦值
華師 c main函式的四種情況 static void main static int main static void main string args static int main string args 1.主程式main函式一共有以上四種版 2.一個程式中不能有兩個以上的main函式,有...
C 裡const有什麼用,c 中const的作用是什麼?
const 限定一個變數是const,一旦初始化後,它的數值就不允許改變,只能用於 讀 const量不能做左值,不能用於 寫 例如 const int x 10 宣告和初始化x 20 錯了,x 不能做左值。printf d n x 用於指標時,比較複雜。const int p p 只讀int con...