前两天写代码时同事碰到一个c++编译错误,代号为c2664,内容为 不能将const object * __w64 to object*, 但明明取的就是一般的object*,怎么会说我们给的参数类型是const object* __w64,很奇怪。
经过细心检查,原来是函数参数的问题,用的const object& 类型,虽然大家一般都用const 加 &来创建参数,这样效率会高,也可防止修改对象。但在实际的应用中,这样使用也会有一些问题。
class object{
public:
void f() const { };
char * getMember{ return p };
private:
//member viarible;
char * p;
};
void test(const object & parm)
{
}
在test函数中有个const & 参数,是一个常对象,而常对象只能只能访问它自己的const 成员函数,所以这对我们使用object的成员函数造成一些限制。如果不慎使用了非const成员函数,会造成编译错误。
void test(const object & parm)
{
char* temp = parm.getMember();
// 编译错误,error C2662: 'object::getMember' : cannot convert 'this' pointer from 'const object' to 'object &'
}
后续: