[英]Why can't I directly return reference to a pointer from a function returning a pointer?
[英]Why can't I return a reference from this template function?
我直接從一本書( Sams每天一小時教你自己C ++)中拿出這個例子:
// Get the maximum of two values
template <typename objectType>
objectType& GetMax(const objectType& value1, const objectType& value2)
{
if (value1 > value2)
return value1;
else
return value2;
}
本質上,它是一個非常詳細的模板函數,用於查找任何類型的2個值之間的最大值。
我試圖使用如下函數:
// Test the Max function
int x_int = 25;
int y_int = 40;
int max_int = GetMax(x_int, y_int);
cout << "max_int: " << max_int << endl;
double x_double = 1.1;
double y_double = 1.001;
double max_double = GetMax(x_double, y_double);
cout << "max_double: " << max_double << endl;
但是,當我嘗試編譯並運行代碼時,我收到以下錯誤:
錯誤1錯誤C2440:'return':無法從'const int'轉換為'int&'
錯誤2錯誤C2440:'return':無法從'const int'轉換為'int&'
錯誤3錯誤C2440:'return':無法從'const double'轉換為'double&'
錯誤4錯誤C2440:'return':無法從'const double'轉換為'double&'
如果我只是從函數的返回類型中刪除&
,它將編譯並成功執行。
為什么我不能從這個函數返回一個引用? 這本書是錯的,還是我錯過了什么?
這里的問題是參數聲明的const
部分。 變量value1
和value2
是對常量值的引用,但是返回對非常量值的引用。
錯誤解釋了這一切,您不能返回const引用的非const引用。
// Get the maximum of two values
template <typename objectType>
const objectType& GetMax(const objectType& value1, const objectType& value2)
{
if (value1 > value2)
return value1;
else
return value2;
}
您應該指出錯誤引用的行(以及發布其他人可以復制/粘貼到其編輯器中的完整程序)。
但我希望他們能參考這一行
return value1;
和之后的類似之一。 錯誤告訴你到底出了什么問題:
cannot convert from 'const int' to 'int &'
當然,如果我們調查這條線試圖做的細節,我們會發現你想要返回的東西是const:
const objectType& value1
但函數承諾返回的類型是一個nonconst引用:
objectType& GetMax
函數GetMax
的返回類型是一個引用,但是您嘗試返回一個const
引用的變量。
這是不允許的,編譯失敗。
試圖在value1
和value2
上使用const_cast
來繞過這種機制是危險的,因為從最初的const
值中刪除const
的行為是未定義的。
顯而易見的事情是將GetMax
的返回類型更改為const
引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.