Vin*_*ent 1 c++ pointers const reference
考虑以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
GCC为getptrc函数生成错误invalid initialization of reference of type 'const double*&' from expression of type 'const double* const'.但函数getvalc编译得很好.我不明白getvalc和getptrc之间的区别在于错误的起源.
错误的原因是什么以及为什么我不能为返回指针引用的函数设置const?
const double*&是指向a的指针const double.
const double* const是一个指向a的const指针const double.
这意味着您必须返回一个常量指针.
inline Type* const & getptrc() const {return _ptr;}
Run Code Online (Sandbox Code Playgroud)
conston methods意味着您不会修改数据成员.要填充该合同,您必须返回一个常量指针,否则,您可以修改该数据成员_ptr.但是,在您的其他情况下getvalc,您已经通过返回a已经完成了该合同const double.