c++ 参数类型不同修饰(const/volatile/&/&&)的函数重载优先级

测试编译器:VS2022 c++latest

测试方法: 写出如下特化类,然后尝试调用print(),如果编译器报调用不明确,那么表示当前级别有多个重载函数,把被提示的重载全部注释,编译器会提示下一组,如果当前级别仅有一个重载,则编译器会在连接阶段报符号未定义,也把这个未定义函数注释掉。最后编译器会到达void foo(...){},则已经穷尽了所有匹配。

#define foo(T) void foo(T b);

template<typename Input, typename Base>
struct Priority;
template<typename Base>
struct Priority<Base&&, Base>
{
    using Input = Base&&;
    const char* str;
    foo(Base);
    foo(Base&);
    foo(Base&&);
    foo(const Base&);
    foo(const Base&&);
    foo(volatile Base &);
    foo(volatile Base&&);
    foo(const volatile Base&&);

    // void (foo)(...){}

    void print()
    {
        Base b = {};
        (foo)((Input)b);
    }
};
 

表达式   第一级
函数
  第二级
函数
  第三级
函数
  第四级
函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值