簡體   English   中英

C++如何傳遞對函數的引用

[英]C++ How to pass reference to function

我有一個類通過引用獲取變量。 類中的一個函數需要調用另一個打印對象的函數。 將引用對象從process()傳遞到disp()時會出現問題。 我可以將一個函數的引用傳遞給另一個函數嗎? 如何使用參考實現這一點以及在這種情況下的最佳實踐是什么?

(我知道可以采用其他方法,例如使用指針或按值傳遞給類。但是,我想通過參考了解解決方案。)

class Abc
{
  double &a, &b;
public:

  Abc(double &var1, double &var2): a(var1), b(var2) {}

  void process()
  {
    //call disp()
    disp(a); //Question
  }

  void disp(double &var)
  {
    std::cout << var;
  }
};

int main()
{
  double x=2.2, y=10.5;
  Abc obj1(x,y);
  obj1.process(); //question
  return 0;
}

我可以將引用對象傳遞給函數嗎?

迂腐點:沒有“參考對象”這樣的東西。 引用不是對象。

但是是的,可以傳遞對函數的引用。

將引用對象從process()傳遞到disp()

你已經在那里傳遞了一個引用。 程序的那部分是正確的。


你這里確實有問題:

Abc::Abc(double&, double&);

float x=2.2, y=10.5 // anohter bug: probably intended to have a semicolon here
Abc obj1(x,y);

當一種類型 ( float ) 的對象綁定到通過繼承 ( double& ) 不相關的另一種類型的引用時,操作數將轉換為目標類型 ( double )。 轉換的結果是一個臨時的 r 值。 非常量 l 值引用不能綁定到 r 值,因此程序格式錯誤。

即使引用可以被綁定(例如,如果您使用允許它的語言擴展,或者如果您使用 const 引用),臨時變量的生命周期也只會延長它綁定到的引用變量的生命周期,這是構造函數的參數。 構造函數完成后,成員引用將引用其生命周期已經結束的臨時對象,因此使用這些引用將具有未定義的行為。

簡單的解決方案:使用與引用相同類型的變量: double x=2.2, y=10.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM