[英]Function return reference in C++
double& squaredX (double x)
{
return x*x;
}
它不會編譯,因為您不能將非常量引用綁定到臨時引用(這是x*x
的結果,臨時int
和double&
的返回類型甚至不兼容),即使您對此進行了糾正,您正在返回一個不正確的局部變量的引用,因為該變量在函數返回時超出了范圍。
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 可以是double
、 int8_t
、 int
、 int8_t
MyComplexMath::Quaternion
...任何支持operator*
東西。 它還支持按引用傳遞,以防參數復制成本高昂。
可以說,這可能(確實如此)嚇跑了人們,因此可能不是“最好的”。 它仍然沒有解決溢出問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.