考虑以下代码:
#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 ?