我正在使用gcc 4.8.4。爲指針重載rvalue/const左值
下面的代碼失敗,並從管線22中的編譯器錯誤(指示):
類型的參考無效初始化 '詮釋* & &' 從類型的表達式INT * const的'
爲什麼不使用square
的左值版本調用square(ptr)
?
#include <iostream>
#include <memory>
int square(int* &&num) {
std::cout << "rvalue" << std::endl;
std::unique_ptr<int> x(num);
const auto ptr = x.get();
return square(ptr); // this is line 22
}
int square(const int* &num) {
std::cout << "lvalue" << std::endl;
return (*num) * (*num);
}
int main() {
std::unique_ptr<int> up(new int);
*up = 5;
std::cout << square(up.release()) << std::endl;
}
'square(const int *&)'在'square(int * &&)'之前被聲明瞭嗎?如果不是,那麼'square(int * &&)'不知道'square(const int *&)'存在,因此試圖遞歸地調用它自己,而不是因爲'const int *'可以' t被分配給一個'int * &&'。 –