使用'Const'的函数重载

问题描述 投票:-2回答:2

有2个相同的功能。一个使用带const关键字的参数,另一个-不带。

void A(const int* p);
void A(int* p);

int main()
{
    int x;
    A(&x);
    return 0;
}

void A(const int* p)
{
    cout << "2" << endl;
}

void A(int* p)
{
    cout << "1" << endl;
}
  1. 是否功能超载?
  2. 为什么没有const的函数会被称为我的情况?
c++
2个回答
7
投票

是否功能超载?

是。这两个函数的名称相同,但参数不同,因此它们是重载。

为什么没有const的函数会被称为我的情况?

因为x不是const。尝试使用指向const int的指针,您将获得另一个重载:

const int y;
A(&y);

0
投票

我认为这是最初问题的变体:摘自Stroustrup的C ++之行

template<typename T>
class C {
    ...
    public:
    ...
    T& operator[](int i);
    const T& operator[](int i) const;
}

据我所知,第二种方法将针对不希望修改此对象的情况。

我只是想知道编译器是否能够在每种情况下准确地猜测到这一点。

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