cpp-函数重载-注意事项

03-2 函数重载-注意事项

  1. 引用作为函数重载的条件

    #include 
    using namespace std;
    void func(int& a)
    {
    cout << "func(int& a)" << endl;
    }
    void func(const int& a)
    {
    cout << "func(const int& a)" << endl;
    }
    int main()
    {
    int a = 10;
    func(a);
    func(10);
    system("pause");
    return 0;
    }

    运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

    func(int& a)
    func(const int& a)

    首先,我们应该清楚的是:int& aconst int& a是类型不同的形参。

    再者,我们要理解func(a);调用的是void func(int& a),而func(10);调用的是void func(const int& a)

    1. func(a);调用的是void func(int& a)

      因为a是一个变量,变量的特点就是可以读、写。如果加上const,相当于是限制只可以读。所以在引用的函数重载中,如果传入的是一个变量,ta 会调用不加上const修饰的函数。

    2. func(10);调用的是void func(const int& a)

      如果仔细想想。如果func(10);调用void func(int& a),那么在运行函数的时候,就会遇到一段int& a = 10;,这样明显是不符合引用的(引用的本质是一个指针,所以一定要指向的是一块合法的内存空间)。

      而调用void func(const int& a)时,会执行这样一段const int& a = 10;。在引用的时候我们学习过了。

      如果我们写一段这样的代码:

      const int& a = 100;

      编译器会自动改为:

      int temp = 100; 
      int& a = temp;

      所以const int& a = 10;没有语法错误。所以func(10);会调用void func(const int& a)

  2. 函数重载遇到函数默认参数

    void func2(int a,int b = 10)
    {
    cout << "func2(int a,int b)" << endl;
    }
    void func2(int a)
    {
    cout << "func2(int a)" << endl;
    }

    这样一段代码是没有错误的。但是我们调用的时候,如果这样传递,就会产生错误:

    int a = 10;
    func2(a);

    在这里出现了二义性,会报错。在这里调用函数的时候只传入了一个数据。如果调用void func2(int a,int b = 10),第二个参数有默认值了,可以不传入。但是不传入第二个参数,就会和void func2(int a)产生歧义:因为void func2(int a)只需要传入一个参数。

    所以最好办法就是不要出现,也就是不要写。因为当函数的重载遇到函数的默认参数的时候,很容易出现二义性。

    如果出现这样传入,那么就不会出现二义性。(不会产生二义性)。

    func2(10, 20);
文章「cpp-函数重载-注意事项」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/842」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇