我正在研究一些CPP代码,并且我想知道为什么该代码无法编译:
class A {
int K;
const int* f(const int* k) const {
return *k;
}
};
并且此代码会编译:
class A {
int K;
const int* f(const int* k) const {
return &K;
}
};
我没有得到什么区别,因为我也试图在第一个中返回一个const。&K const是因为它是地址吗?
谢谢。
指针可以保存对象的内存地址。现在,由于函数const int* f(const int* k) const
返回指向const
的int
指针,这意味着您必须将int
的内存地址返回给它。
在第一个函数中,您取消引用指针并将其返回给该函数,这意味着您正在返回一个值。这不起作用,因为您应该返回一个指针或另一个对象的内存地址。
您的第二个函数将被编译,因为您将其返回给对象一个地址(在您的情况下为整数int K
的内存地址。
在第一种情况下,您要取消引用const int* k
指针,这意味着您试图返回int
值,而函数const int* f(const int* k) const
希望返回指针const int*
。