簡體   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