1樓:王贇 Maigo
多個返回值可以說只是乙個語法糖,從功能上看,它並沒有做到單個返回值做不到的事情。
但是這個語法糖可以使得某些情況下程式簡潔、易讀。
比如乙個函式的功能是計算乙個陣列中的最小值和最大值,此時使用兩個返回值就非常好懂:
[min max] = minmax(a) % matlab
當然,也可以把最小值和最大值中的一者作為返回值,另一者用引數傳遞:
int minmax(int* a, int& max); // C++, 返回值為最小值,最大值用引數傳遞
或者二者都用引數傳遞:
void minmax(int* a, int& min, int& max); // C++
但顯然後兩者直觀性比較差。
在C或C++裡也可以定義乙個結構體,作為返回值型別:
typedef struct minmaxtype;
但為了乙個函式的返回值這種「區域性性」很強的東西而汙染全域性的命名空間,顯得不值得。
Matlab一模擬較「高階」的語言,使用方便是乙個重要目標,所以它們會提供多個返回值這樣的語法糖。
而C、C++一模擬較接近底層的語言,由於歷史原因,往往未考慮這一點。
為什麼不把要返回元素直接當成函式的返回值返回呢?
phoenix bool get elem elem get throw elem get bool 回字的四種寫法 iter get tuple get 想到再加 ant 有些時候乙個返回不夠用啊,函式中好幾個值需要傳出時只能通過引數傳遞實現,而不能簡單的通過函式返回值。當然,你也可以設計乙個資料...
JS 建構函式返回值的問題
如果return的值是object,那麼就返回這個return的object,前面的this就都是無效的 如果return的值型別不是object,就還是返回this 搬運一下Annotated ES5 11.2.2 The new Operator The production NewExpres...
C 的函式返回值是如何構造的?
你如果是想問為什麼少輸出乙個new的話,那是因為F在隱式建立返回值物件的過程中,呼叫的是複製建構函式A const A 而不是預設的無參建構函式A 所以你自定義的無參建構函式A 並沒有捕獲到這次構造。include using namespace std struct A A A const A o...