我正在研究一些C ++代码,并且我想知道为什么此代码无法编译:
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
指针,这意味着您必须返回指向const
的int
指针或int
的内存地址。 >
在您的第一个代码中,您取消引用了指针并将其返回给函数,这意味着您正在返回一个值。上述参数不起作用。
但是,由于您将对象的地址返回到f
(在您的情况下为整数int K
的内存地址。),因此您的第二代码将进行编译。
在第一种情况下,您要取消引用const int* k
指针,这意味着您试图返回int
值,而函数const int* f(const int* k) const
希望返回指针const int*
。
您可能对这里的语法感到困惑。尽管有出现,但运算符*
返回引用,而运算符&
返回指针。例如: