重载和const形参

  顶层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 lookup(const Account*);  //新函数,作用于指向常量的指针

复制代码

  在上面的例子中,编译器可以通过实参是否是常量来推断应该调用哪个函数。因为const不能转换成其它类型,所以我们只能把const对象(或指向const的指针)传递给const形参。相反的,因为非常量可以转换成const,所以上面的4个函数都能作用于非常亮对象或者指向指向非常量对象的指针。不过,当我们传递一个非常量对象或者指向非常量对象的指针时,编译器会优先使用非常量版本的函数。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部