C定義預設引數時方向從右向左,這句話無法理解

2022-04-20 03:56:31 字數 3354 閱讀 7113

1樓:

指c++中帶預設值的引數必須全部排在()最右側, 中間不能夾著不帶預設引數的引數. 如果允許預設引數寫在一般引數的左側的話, 呼叫時就會變成這樣: func(, , 1, 3, 4, 5)使用預設引數時只能直接空掉幾個引數不填, 然而c++並不允許這種寫法, 於是只能把預設引數全部定義在最右側然後連同逗號一起省略

2樓:匿名使用者

這句話有問題。 省略引數後面(右面)的引數不許省略,不然亂套了。定義時預設引數後面不能有必須引數了。

3樓:匿名使用者

預設引數的意思是,如果在使用該函式時,可以不傳遞該預設引數,因此,必須把預設引數放在右邊,否則,系統怎麼知道你要省略的是哪個引數撒?

4樓:我是白痴

假設一個函式頭是void show(int a,int b,int c)

1、因為傳參時,是按形參列表從左向右賦值的(即先賦給a,再賦給b,最後賦給c)。故如果設預設值的話,應該從最右端開始,才能保證傳進來的值能正確對應地賦給所想的引數,也不會覆蓋掉預先設好的預設值

2、上例中,如果要定義預設引數,則首先應該定義c的預設引數值,只有在c的預設值定義好的情況下才能繼續定義b為預設引數。滿足從右向左順序。例如,void show(int a,int b =1,int c=2)

3、如果不按順序來,比如定義成了void show(int a,int b=1,int c),首先,vs2010會報錯。不過,先假設比較早的版本不報錯。

若想讓b使用預設值,則在呼叫函式時無法成功

1)比如,寫成show(2,,3),這樣寫是錯誤的

2)比如,寫成show(2,3),系統肯定會認為這是給a、b傳的值。而c沒被傳值,又沒有預設值,因此還是錯的

c++中函式預設值的問題

5樓:

" 函式中有多個預設引數,則形參應從最右邊依次向左設定。"

-- 意思是,當第i 個引數有預設值時,

第i +1,i+2,i+3 。。。直到最後一個引數都必須 給預設值。否則語法錯。

void point(int x,int y=0,int z=0); -- 對

void point(int =0,int,int =0); -- 錯

void point(int =0,int =0,int); -- 錯

void point(int ,int,int =0); -- 對

"當呼叫函式時,只能向左匹配引數。" --

如果函式有4個引數,你呼叫時填了兩個,那麼第3和第4個引數用預設值 -- (對的)

如果函式有4個引數,你呼叫時填了3個,那麼第4個引數用預設值。-- (對的)

你不能說,我填2個引數,算第1第3 ,第2和第4個引數用預設值。-- (就錯了)。

6樓:sweet丶奈何

void point(int x=10,y=20); //這句是 宣告

void point(int x=10,y=20) {} //帶函式體沒有分號是定義

所以第一節裡只有宣告沒有定義,函式在呼叫前需要宣告。

但如果在main函式前定義的函式是可以省略宣告直接呼叫的。

簡而言之,就是使用預設引數時是把預設引數寫道宣告裡了,省略宣告時寫到定義裡(其實也就是宣告和定義合二為一了)。

7樓:巫彬計採楓

必須按照引數順序對位入座。你的呼叫相當於把"y"(char)賦給了int。這樣可定是不行的。

8樓:盈彗張繡

函式傳值呼叫時,實際引數作為右表示式想形式引數提供初始值。c++的允許指定引數的預設值,凼函式呼叫中升略預設引數時,預設值自動傳遞被呼叫函式

c++中,函式在定義時可以預先定義出預設引數值,預設形參值必須按什麼順序定義

9樓:匿名使用者

形參列中,沒有預設值的放前面,有預設值的放後面:

如:int add(int x, int y = 100)則呼叫 add(12, 23); 返回 12+23呼叫 add(12); 時 返回 12+100

10樓:丶下里巴人

沒有預設形參值的引數必須放前面。

比如fun(int x,in y=1,int z=2);

你可以這樣呼叫,fun(1,3,4);此時引數的值是你給的值fun(1,3);y是你穿進去的3,z是預設的2fun(1);y,z都是預設的

另外如果你的函式在定義之前已經有宣告,那麼需要在宣告中給出預設形參值,而不是定義

c++中預設引數是什麼?誰給我講講

11樓:匿名使用者

1、預設引數的目的預設引數也稱預設引數,c++可以給函式定義預設引數。通常,呼叫函式時,要為函式的每個引數給定對應的實參,但有時需要用相同的實參反覆呼叫該函式,這時,c++可以給該引數定義預設值,預設引數在函式宣告中提供。如宣告函式void delay(int loops=1000);這樣,無論何時呼叫delay()函式,都不用給loops賦值,程式會自動將它當作1000進行處理;當然也可以對其進行賦值。

若對其賦值,則按所賦的實參進行運算;若沒有賦值,則按指定的預設值進行運算。例如:delay(2500); // loops設定為2500delay(); //ok:

loops採用預設值1000允許函式預設引數值,是為了讓程式設計更簡單。當一個函式有多個預設引數時,在主函式呼叫該函式時,會出現實參個數小於函式真實引數個數(形參個數)的現象,實際上缺少的引數在該函式宣告時已經提供了預設值,實參中不賦值等於採用了預設值。(我們在程式中呼叫mfc內建函式時會經常遇見這種情況!

)2、預設引數的宣告預設引數在函式宣告中提供當函式又有宣告又有定義時,定義中不允許提供預設引數;當函式只有定義時,預設引數才可以出現在函式定義中。3、預設引數的順序規定如果一個函式中有多個預設引數,則形參分佈中,預設引數應該從右至左逐漸定義。也就是說,預設引數只能集中放在函式引數的最後面,這是為了保證函式呼叫時引數傳遞的正確性。

例如:void func(int a=1,int b,int c=3,int d=4) //errorvoid func(int a,int b=2,int c=3,int d=4) //ok而在呼叫該函式時,系統會向左匹配引數。例如,對第二個函式宣告,其正確的呼叫方法為:

func(10,15,20,30); //ok:呼叫時給出所有實參func(); //error:引數a沒有預設值func(12,12); //ok:

引數c和d採用預設值func(2,15, ,20); //error:只能從右向左順序匹配預設值

C在定義函式時,在傳遞的引數後面加上是什麼意思

沒有這個形式,寫反了,應該是 bool start char strr 這是說,函式的形參是你傳遞的實參的一個別名 引用 什麼叫別名呢?那就是一損俱損,一榮俱榮,完全可以當作同一個東西對待。說白了,函式裡對引用引數的改變會影響到呼叫這個函式的程式中實參的值。引用,也就是直接用該變數,不生成副本 沒有...

C 定義函式,有引數,實現對實參值的交換,用指標和引用2種方式實現

如下 void cmp int a,int b void cmp int a,int b 飲冰軒者 include main 這是引用,指標和這個差不多 include main 這是指標,求採納 void swap1 int a,int b 指標 void swap2 int a,int b 引用...

sql裡定義引數時用和不用有什麼區別

當然有區別了,而且區別很大。如果寫成 declare name int 會有語法錯誤,錯誤資訊是 int 不是可以識別的cursor 遊標 選項 加上後面的內容,說明這個是一個引數,如果不加的話,你怎麼用引數呢,比如你本來是想給引數賦值,結果寫成這樣 select a column name fro...