C++中const对函数重载的影响
const对函数重载的影响
下面这篇讲的非常好!
参考:C++中const用于函数重载 - 青儿哥哥 - 博客园 (cnblogs.com)
C++Primer里的概念
1.顶层const不影响传入函数的对象,不构成函数重载
void fun(int a)和
void fun(const int a);
实际上没有区别,因为函数调用的时候,存在形实结合的过程,所以不管有没有const都不会改变实参的值。
2.如果函数的形参是某种类型的指针或引用,通过区分指向的是常量对象还是非常量对象可以实现函数重载。构成函数重载
即区分 1)指针与指向常量的指针;2)引用与常量的引用
3.常成员函数和非常成员函数之间的重载(const修饰成员函数时的重载)构成函数重载
声明:<类型标志符>函数名(参数表)const;
说明:
(1)const是函数类型的一部分,在实现部分也要带该关键字。
(2)const关键字可以用于对重载函数的区分。
(3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数。
(4)非常量对象也可以调用常成员函数,但是如果有重载的非常成员函数则会调用非常成员函数。
重载看例子:
#include<iostream> using namespace std; class Test { protected: int x; public: Test (int i):x(i) { } void fun() const { cout << "fun() const called " << endl; } void fun() { cout << "fun() called " << endl; } }; int main() { Test t1 (10); const Test t2 (20); t1.fun(); t2.fun(); return 0; }
结果为:
参考:const和非const函数重载 - stemon - 博客园 (cnblogs.com)‘
2023.1.30更新一些。