考慮下面的代碼:引用無效初始化:指針和值之間的區別?
#include <iostream>
#include <vector>
template<typename Type> class MyClass
{
public:
MyClass(Type* ptr) : _ptr{ptr}, _val{*ptr} {;}
inline Type*& getptr() {return _ptr;}
inline Type*& getptrc() const {return _ptr;}
inline Type& getval() {return _val;}
inline Type& getvalc() const {return _val;}
protected:
Type* _ptr;
Type _val;
};
int main()
{
std::vector<double> v = {0, 1, 2};
MyClass<const double> x(&v[0]);
x.getval();
x.getvalc(); // <- OK
x.getptr();
x.getptrc(); // <- ERROR : "invalid initialization of reference of type 'const double*&' from expression of type 'const double* const'"
return 0;
}
GCC產生用於getptrc功能invalid initialization of reference of type 'const double*&' from expression of type 'const double* const'
錯誤。但函數getvalc編譯得很好。我不明白getvalc和getptrc之間的區別是錯誤的起源。
錯誤的原因是什麼,爲什麼我不能把一個const函數返回一個指針的引用?
如果您需要參考,下面是編譯的代碼:http://liveworkspace.org/code/8eb059d7b1869316740a6e620ebf5ad2。當然,對速度指針的引用不會有太大的作用,如果你需要修改它,'const'不是正確的選擇。 – chris