所以我正在實現一個本地數組包裝器,它將允許這樣的函數參數傳遞並返回。我遇到了麻煩,但將其轉換爲本地數組無法返回本地數組。作爲替代,我決定使用轉換運算符的'右值'引用返回類型,但這不會正確執行,因爲如果我想將返回的對象綁定到「右值」引用以延長它的生存時間,則不會因爲它是'xvalue'而不是'prvalue'。有沒有解決這個問題的方法?也許一些'prvalue'投了?或者如果有其他方法來實現這種隱式轉換爲'數組'?C++ - 如何通過引用返回一個prvalue?
類:
template<typename type>
struct tmp
{
tmp() {}
tmp(const tmp &) = default;
tmp(const type & arg) : tmp(*(const tmp*)arg) {}
&& operator type() && {return static_cast<type&&>(d);}
~tmp() { cout << "tmp destructor" << endl; }
type d;
};
和使用它的代碼:
tmp<tmp<int [4]>> Func() // used 'tmp<int [4]>' instead of array to track object destruction (but normally it should be an native array type
{
return tmp<tmp<int [4]>>();
}
int main()
{
tmp<int [4]> &&tmp1 = Func(); //implicit cast (from 'tmp<tmp<int [4]>>') to 'tmp<int [4]>', calls tmp::operator type()
cout << "Here" << endl;
return 0;
}
程序輸出:
TMP析
TMP析
這裏
正如你看到的演員操作符的返回值沒有擴展。
生活example。
'return tmp>();'只能是'return {};' –
chris
2014-12-03 19:47:42
問題是關於第8行返回值的隱式轉換。 – AnArrayOfFunctions 2014-12-03 19:49:14
根據定義,忽略函數不能有任何對prvalues。你只能引用(可能是臨時的)對象。左值和xvalues是對象,prvalues不是。 – hvd 2014-12-03 19:49:52