C++函數(shù)返回雙值的幾種方法
在C++結(jié)合Qt的開發(fā)環(huán)境中,若要讓函數(shù)返回兩個double類型的值,有不少合適的數(shù)據(jù)類型可供選擇。下面為你詳細介紹幾種常見的方案及其適用情形:
1.std::pair<double, double>
這是C++標準庫提供的模板類,其主要功能就是將兩個值組合成一個對象。它的優(yōu)勢在于使用起來非常簡便,而且無需引入額外的依賴。
#include <utility>
std::pair<double, double> calculateValues() {
double value1 = 3.14;
double value2 = 2.71;
return {value1, value2}; // C++17及之后的統(tǒng)一初始化語法
}
// 調(diào)用示例
auto result = calculateValues();
double a = result.first;
double b = result.second;
2.QPair<double, double>
QPair是Qt框架提供的類,它和std::pair的功能類似。不過,它能更好地和Qt的元對象系統(tǒng)以及序列化機制相融合。
#include <QPair>
QPair<double, double> calculateValues() {
double value1 = 3.14;
double value2 = 2.71;
return qMakePair(value1, value2);
}
// 調(diào)用示例
QPair<double, double> result = calculateValues();
double a = result.first;
double b = result.second;
3. 自定義結(jié)構(gòu)體(struct)
當(dāng)返回值有具體的業(yè)務(wù)含義時,建議使用自定義結(jié)構(gòu)體。這樣可以讓代碼的可讀性更強,維護起來也更加方便。
struct MyResult {
double firstValue;
double secondValue;
};
MyResult calculateValues() {
MyResult result;
result.firstValue = 3.14;
result.secondValue = 2.71;
return result;
}
// 調(diào)用示例
MyResult result = calculateValues();
double a = result.firstValue;
double b = result.secondValue;
4.QPointF
要是返回的兩個值代表二維平面上的坐標點,使用QPointF是個不錯的選擇。它還提供了一些幾何操作函數(shù)。
#include <QPointF>
QPointF calculatePoint() {
double x = 3.14;
double y = 2.71;
return QPointF(x, y);
}
// 調(diào)用示例
QPointF point = calculatePoint();
double x = point.x();
double y = point.y();
選擇建議
- 若返回值僅用于臨時處理,不具備特定業(yè)務(wù)意義,可優(yōu)先考慮
std::pair或QPair。 - 若返回值代表坐標、尺寸等具有幾何意義的值,
QPointF或QSizeF是很好的選擇。 - 若返回值有明確的業(yè)務(wù)含義,像“價格和數(shù)量”“寬度和高度”等,建議使用自定義結(jié)構(gòu)體。
在Qt項目里,以上幾種方案都能正常使用。不過,使用Qt特定的類型(如QPair、QPointF)可以讓代碼更好地融入Qt的生態(tài)系統(tǒng)。
5.std::pair額外說明
你想知道在C++中,除了使用C++17及之后的統(tǒng)一初始化語法return {value1, value2};,還有哪些方式可以從calculateValues函數(shù)中返回std::pair<double, double>類型的值。
以下是幾種常用且兼容不同C++版本的寫法,我會按兼容性和簡潔性排序說明:
1. 顯式調(diào)用std::pair構(gòu)造函數(shù)(兼容所有C++版本)
這是最基礎(chǔ)、兼容性最好的寫法,從C++98開始就支持,無需依賴任何新特性:
#include <utility> // 必須包含std::pair的頭文件
std::pair<double, double> calculateValues() {
double value1 = 3.14;
double value2 = 2.71;
// 顯式構(gòu)造std::pair對象并返回
return std::pair<double, double>(value1, value2);
}
2. 使用std::make_pair(C++98+,簡潔)
std::make_pair是一個模板函數(shù),會自動推導(dǎo)參數(shù)的類型,無需手動指定<double, double>,代碼更簡潔:
#include <utility>
std::pair<double, double> calculateValues() {
double value1 = 3.14;
double value2 = 2.71;
// 自動推導(dǎo)類型,返回std::pair<double, double>
return std::make_pair(value1, value2);
}
3. C++17類模板實參推導(dǎo)(CTAD)
C++17支持類模板實參推導(dǎo),無需指定模板參數(shù),直接用std::pair{}構(gòu)造:
#include <utility>
std::pair<double, double> calculateValues() {
double value1 = 3.14;
double value2 = 2.71;
// C++17特性:自動推導(dǎo)pair的模板參數(shù)
return std::pair{value1, value2};
}
4. 先創(chuàng)建對象再返回(兼容所有版本)
如果需要更清晰的邏輯(比如中間需要修改值),可以先創(chuàng)建pair對象,再返回:
#include <utility>
std::pair<double, double> calculateValues() {
double value1 = 3.14;
double value2 = 2.71;
// 先構(gòu)造對象,可在中間修改值
std::pair<double, double> result(value1, value2);
// 例如:result.first += 1.0;
return result;
}
總結(jié)
- 兼容性優(yōu)先:選擇
std::pair<double, double>(value1, value2)或std::make_pair(value1, value2)(支持C++98及以上)。 - C++17及以上:優(yōu)先用
return {value1, value2}(統(tǒng)一初始化)或return std::pair{value1, value2}(CTAD),代碼最簡潔。 - 可讀性優(yōu)先:如果需要中間修改返回值,先創(chuàng)建pair對象再返回是更清晰的選擇。
所有寫法的核心都是構(gòu)造std::pair<double, double>對象并返回,只是語法形式和兼容版本不同,功能上完全等價。
到此這篇關(guān)于C++函數(shù)返回雙值的幾種方法的文章就介紹到這了,更多相關(guān)C++函數(shù)返回雙值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用
這篇文章主要介紹了C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調(diào)用的方法
這篇文章主要介紹了vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調(diào)用的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒)
這篇文章主要介紹了C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07

