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更新一些。

 

posted @ 2023-01-22 23:24  小头痛  阅读(214)  评论(0编辑  收藏  举报