我們使用string物件表示視窗內容時,希望視窗的高,寬等都有乙個預設值。但同時允許這些引數自由指定與預設不同的值,此時可以定義成如下形式:
typedef string :: size_type sz;
string screen (sz ht = 24, sz wid = 80, char backgrnd = ' ' );
引用時,如果想使用預設值,則直接將screen函式置空,改變哪個值將哪個引數賦值。
例: screen(); 等價於screen(24, 80, ' ');
screen(66); 等價於screen(66, 80, ' ');
但是因為函式呼叫時是按照位置解析,所以應該合理設定形參的順序,盡量讓不怎麼使用預設值的形參在前面。
sz wd = 80;
char def = ' ';
sz ht();
string screen (sz = ht(), sz = wd, char = def);
若此時呼叫函式改變一些實參:
例:void f2()
內聯函式,在編譯中展開,在函式返回型別前加上 inline 既可。
constexpr函式
指能用於常量表示式的函式,函式返回型別及所有形參型別都必須是字面值型別,且函式體有且只有乙個return語句
允許constexpr函式的返回值並非乙個常量:
constexpr size_t scale (size_t cnt)
呼叫時:
int arr[scale(2)]; //正確,scale(2)是常量表示式
int i = 2;
int arr[scale(i)]; //錯誤,不是常量表示式
常量表示式是指值不會改變並在編譯過程就能得到計算結果的表示式。
int i = 3; 中,雖然i本身是乙個常量,但其值直到執行時才能獲得,但改為 const int i = 3;就是常量表示式了。
虛函式與預設實參
include using namespace std 2013.9.5 c primer p482 虛函式也可以有預設實參。如果有用在給定呼叫中的預設實參值,該值將在編譯時確定。如果乙個呼叫省略了具有預設值的實參,則所用的值由呼叫該函式的型別定義,與物件的動態型別無關。通過基類的引用或指標呼叫虛函...
虛函式中的預設實參
c premier 先看例子吧 include iostream using namespace std class base class derived public base public int foo int ival 2048 cout cout cout 我是初學c 用編譯器執行突然發現...
c 虛函式與預設實參
c primer 中原文 像其他任何函式一樣,虛函式也可以有預設實參。通常,如果有用在給定呼叫中的預設實參值,該值在編譯時確定。如果乙個呼叫省略了具有預設值的實參,則所用的值由呼叫該函式的型別定義,與物件的動態型別無關 通過基類的引用或指標呼叫虛函式時,預設實參為在基類虛函式宣告中指定的值,如果通過...