功能过载使用' Const'

时间:2015-05-22 13:39:53

标签: c++

有两个相同的功能。一个用 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 的函数会被称为我的情况?

2 个答案:

答案 0 :(得分:7)

  

它是否正在重载?

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

  

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

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

const int y;
A(&y);

答案 1 :(得分:0)

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

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

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

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