為什麼 C Java 中函式返回值是單一的,而 Matlab Octave 則支援多個返回?

時間 2021-06-04 10:18:46

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...