最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++函數(shù)返回雙值的幾種方法

 更新時間:2026年01月13日 10:03:30   作者:CSDN_RTKLIB  
本文介紹了在C++和Qt開發(fā)中返回兩個double值的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在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)

當返回值有具體的業(yè)務含義時,建議使用自定義結(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è)務意義,可優(yōu)先考慮std::pairQPair。
  • 若返回值代表坐標、尺寸等具有幾何意義的值,QPointFQSizeF是很好的選擇。
  • 若返回值有明確的業(yè)務含義,像“價格和數(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ù),會自動推導參數(shù)的類型,無需手動指定<double, double>,代碼更簡潔:

#include <utility>

std::pair<double, double> calculateValues() {
    double value1 = 3.14;
    double value2 = 2.71;
    // 自動推導類型,返回std::pair<double, double>
    return std::make_pair(value1, value2);
}

3. C++17類模板實參推導(CTAD)

C++17支持類模板實參推導,無需指定模板參數(shù),直接用std::pair{}構(gòu)造:

#include <utility>

std::pair<double, double> calculateValues() {
    double value1 = 3.14;
    double value2 = 2.71;
    // C++17特性:自動推導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é)

  1. 兼容性優(yōu)先:選擇std::pair<double, double>(value1, value2)std::make_pair(value1, value2)(支持C++98及以上)。
  2. C++17及以上:優(yōu)先用return {value1, value2}(統(tǒng)一初始化)或return std::pair{value1, value2}(CTAD),代碼最簡潔。
  3. 可讀性優(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++和easyx圖形庫做一個低配版掃雷游戲

    利用c++和easyx圖形庫做一個低配版掃雷游戲

    這篇文章主要介紹了用c++和easyx圖形庫做一個低配版掃雷游戲,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • C語言排序算法之插入排序

    C語言排序算法之插入排序

    這篇文章主要為大家詳細介紹了C語言排序算法之插入排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用

    C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用

    這篇文章主要介紹了C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C和指針小結(jié)(推薦)

    C和指針小結(jié)(推薦)

    下面小編就為大家?guī)硪黄狢和指針小結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-06-06
  • vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調(diào)用的方法

    vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調(diào)用的方法

    這篇文章主要介紹了vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調(diào)用的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • C++如何在變量前面加#

    C++如何在變量前面加#

    這篇文章主要介紹了C++如何在變量前面加#問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++編程小心指針被delete兩次

    C++編程小心指針被delete兩次

    這篇文章主要介紹了C++編程指針被delete兩次的嚴重后果,以實例闡述了C++指針使用中的誤區(qū)和注意點,需要的朋友可以參考下
    2014-07-07
  • C語言實現(xiàn)電子時鐘程序

    C語言實現(xiàn)電子時鐘程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電子時鐘程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒)

    C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 詳解C++ 拷貝構(gòu)造函數(shù)

    詳解C++ 拷貝構(gòu)造函數(shù)

    這篇文章主要介紹了C++ 拷貝構(gòu)造函數(shù)的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07

最新評論

交口县| 灵川县| 宝山区| 冕宁县| 孙吴县| 澳门| 苏尼特左旗| 晋宁县| 乐业县| 定远县| 青田县| 新沂市| 揭阳市| 新巴尔虎右旗| 岱山县| 洛川县| 泰顺县| 贡觉县| 永顺县| 顺平县| 聊城市| 马关县| 广宗县| 霍州市| 芦山县| 砀山县| 长子县| 大同县| 德江县| 广东省| 凭祥市| 大足县| 册亨县| 宿州市| 吴堡县| 麟游县| 尖扎县| 营山县| 邓州市| 抚顺市| 哈密市|