繁体   English   中英

“ const”,“&”和“ &&”如何影响无参数函数的重载?

[英]How do “const”, “&”, and “&&” affect overloading of a parameterless function?

考虑定义如下的类:

struct A
{
    void f();
    void f() const;
    void f() &;
    void f() const &;
    void f() &&;
    void f() const &&;
};

之间有什么区别?

1)无效A :: f(); 并无效A :: f()&; (请注意这一点!)

2)void A :: f()const; 并无效A :: f()const&;

3)无效A :: f()&&; 和无效的A :: f()const &&;

您可以将它们转换为

void f(A&);
void f(const A&);

void f(A&);
void f(const A&);
void f(A&&) &&;
void f(const A&&);

第一个是特殊的-它是A&但是仍然接受rvalue ,这与其他非常量lvalue引用不同。 在所有其他方面,它与带有A&参数的任何其他函数相同。

第二个( const )和第四个( const&)之间的重载分辨率没有区别,除非它们分别与( && )竞争。 我认为普通函数不会发生这种情况,而是转换函数会发生这种情况,因为标准禁止这种情况(通常,如果当前作用域中有任何带有ref限定符的函数,则所有函数都必须)

void f();
void f() &&;

但是,使用转换函数,您仍然可以同时设置operator int()operator long()&&的重载分辨率。 在那种情况下,即使调用它们的对象是R() (一个右值),如果您需要转换为int ,也将使用第一个转换函数。

  1. f()为正常功能f() constthis必须指向可修改lval中
  2. f() const是const函数(无法更改) f() const &相同,但也保证这也是lval
  3. f()&&这必须是f() const &&的临时值f() const &&这必须是您不能修改的临时值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM