引用返回与const函数中的指针之间的差

问题描述 投票:0回答:3

我正在研究一些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是否因为它是一个地址?

c++ class const
3个回答
1
投票

指针可以保存对象的内存地址。现在,由于函数const int* f(const int* k) const返回指向constint指针,这意味着您必须返回指向constint指针或int的内存地址。 >

在您的第一个代码中,您取消引用了指针并将其返回给函数,这意味着您正在返回一个值。上述参数不起作用。

但是,由于您将对象的地址返回到f(在您的情况下为整数int K的内存地址。),因此您的第二代码将进行编译。


0
投票

在第一种情况下,您要取消引用const int* k指针,这意味着您试图返回int值,而函数const int* f(const int* k) const希望返回指针const int*


0
投票

您可能对这里的语法感到困惑。尽管有出现,但运算符*返回引用,而运算符&返回指针。例如:

© www.soinside.com 2019 - 2024. All rights reserved.