顶层const不影响传入函数的对象。一个拥有顶层const的形参无法和一个没有顶层const的形参区分开来:
Record lookup(Phone); Record lookup(const Phone); //重复声明了Record lookup(Phone) Record lookup(Phone*); Record lookup(Phone* const); //重复声明了Record lookup(Phone*)
在这两组函数声明中,每一组的第二个声明和第一个声明是等价的。
另一方面,如果形参是某种类型的指针或引用,则通过区分其指向的是常量还是非常量对象可以实现函数重载,此时的const是底层的:
//对于接受引用或指针的函数来说,对象是常量还是非常量对应的形参不同 //定义了4个独立的函数 Record lookup(Account&); //函数作用于Account的引用 Record lookup(const Account&); //新函数,作用于常量引用 Record lookup(Account*); //新函数,作用于指向Account的指针 Record lo