我有一個函式可以檢查 a 是否大于 b。我的輸出是“ok”,這意味著 if 陳述句為真,但我不明白為什么它不交換 a 和 b。(p 是函式中的另一個變數)
if (a > b)
{
cout << "ok " << endl;
swap(a, b);
_bubbleUp(p);
}
else
cout << "no " << endl;
我的交換功能
void swap(T a, T b)
{
T temp = a;
a = b;
b = temp;
}
uj5u.com熱心網友回復:
您的交換函式采用a
and b
by value,因此它不會更改傳遞的變數。
為了傳播更改,您需要通過參考獲取引數:
void swap(T& a, T& b)
{
// ...
或者甚至更好:只需使用std::swap()
。
uj5u.com熱心網友回復:
這一行: void swap(T a, T b)
當編譯器看到這一點時,它實際上創建了 a 和 b 的副本,它并沒有改變 a 和 b 的實際值。那就是傳值
您必須通過參考傳遞:void swap(T& a, T& b)
或使用標準std::swap()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/329437.html
上一篇:函式內的百分比格式