簡體   English   中英

C++中的函數返回引用

[英]Function return reference in C++

double& squaredX (double x)
{
   return x*x;
}
  1. 這個函數的潛在問題是什么?
  2. 重寫函數的最佳方法是什么?
  1. 這個函數的潛在問題是什么?

它不會編譯,因為您不能將非常量引用綁定到臨時引用(這是x*x的結果,臨時intdouble&的返回類型甚至不兼容),即使您對此進行了糾正,您正在返回一個不正確的局部變量的引用,因為該變量在函數返回時超出了范圍。

  1. 重寫函數的最佳方法是什么?

x*x的類型是int ,所以返回一個int是有意義的

int squaredX (int x)
{
   return x*x;
}

x*x的結果可能太大而無法放入int ,在這種情況下,您可能希望使用更大的類型進行計算和返回值。 但這取決於具體情況。

一種可能“更好”的方法是使用模板和通用轉發引用(C++11 或更新版本)。

 template<typename T>
 T square(const T&& x)
 {
     return x*x;
 }

T 可以是doubleint8_tintint8_t MyComplexMath::Quaternion ...任何支持operator*東西。 它還支持按引用傳遞,以防參數復制成本高昂。

可以說,這可能(確實如此)嚇跑了人們,因此可能不是“最好的”。 它仍然沒有解決溢出問題。

暫無
暫無

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

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