C 返回值過載

2021-06-18 10:04:58 字數 1574 閱讀 2709

源文:

c++當然是不能僅僅通過返回值過載函式的,但是,我們往往會想:要是支援返回值過載就好了。現在,我就從c++的某個頗受爭議的角落,為您發掘一點東西。

假設有這樣乙個函式:

type getvalue(const dbfield& fd);

可是,dbfield實際的資料型別對於getvalue來說,並不了解,乙個常見的解決方案是:

template

t getvalue(const dbfield& fd);

可是,這樣當然是乙個辦法,而且是不錯的辦法。問題在於,有些時候我們並不方便提供這個t,比如,是乙個運算子過載的時候。另外,當我們不想過早確定返回值型別的時候,我們也不願意提供這個型別t。解決的辦法很簡單,提供乙個間接層:

string getvalue(const dbfield& fd);

int getvalue_int(const dbfield& fd);

result getvalue(const dbfield& fd)

看看如何實現result:

struct result

operator string() const

operator int() const };

現在,讓我們輸出資料:

void print_string(const string& str)

void print_int(int i)

如下使用:

print_string(getvalue(dbfield));

print_int(getvalue(dbfield));

當然,把型別寫進名字可不是什麼漂亮的做法,既然你喜歡過載,沒問題:

template

t getvalue(const dbfield& fd);

struct result

template

operator t() const };

這個方法問題在於,必須在某個結束點提供具體的型別資訊,這也是為什麼我們要寫兩個print而不是直接用cout輸出的原因。可是,話說回來,既然你打算僅僅通過返回值來過載,總要告訴**,返回值是什麼吧?

這裡展示了懶惰計算的技巧,通過乙個間接層,把真正的計算時刻延遲到必需的時候。也許你對返回值過載不屑一顧,但是這個技巧是非常有用的。下一次,我將用懶惰計算的方法,展示另一種技巧。

#include

#include

using namespace std;

string getvalue_slow(const int&)

string g_fast = "getvalue_fast";

const char* getvalue_fast(const int&)

struct result

operator string() const

operator const char* () const

};result getvalue(const int& i)

void print_const(const char* str)

void print(const string& str)

int main()

構造方法 返回值 過載

在我們使用類的時候會使用乙個特殊的方法叫構造方法,也叫構造器 作用 1.構造方法就是專門建立物件的方法,當我們在new的時候其實呼叫的就是構造方法 public 構造方法名 引數 注意 1.構造方法不能寫返回值 2.構造方法名必須和你當前的類名一模一樣,大小都得寫一樣 構造方法是乙個方法,那麼他可以...

c 引用返回值

函式返回值時,要生成乙個值的副本。而用引用返回值時,不生成值的副本。例如,下面的程式是有關引用返回的4種形式 ch9 6.cpp include float temp float fn1 float r float fn2 float r void main void main 見圖9 9說明。圖9...

C 返回值優化

當函式需要返回物件時,通常有兩種寫法,一種是直接在return語句中返回乙個物件,一種是先構造好乙個物件,然後在return中將其返回。以下 為例 include include using namespace std struct node node const node n name n.nam...