[英]c++ - const member func, that can be called upon lvalue instances only, using a ref-qualifier
[英]Overloading a parent member function without ref-qualifier with a child member function with ref-qualifier in C++
In C++ one cannot overload in one class a member function with ref-qualifier with a member function without ref-qualifier. 但同時可以從父 class 繼承一個成員 function 並將其重載到子 class 中,如示例所示:
struct A {
void f() {}
//void f() & {} //overload error everywhere
};
struct B : A {
using A::f;
void f() & {} //ok everywhere
};
int main() {
B b;
b.f(); //ok in GCC only
}
僅在調用f
期間, Clang 抱怨call to member function 'f' is ambiguous
。 但是GCC接受程序沒有任何錯誤,演示: https://gcc.godbolt.org/z/5zzbWcs97
哪個編譯器在這里?
GCC 接受這一點是正確的,但最近情況發生了變化。 當前的措辭是 class 中的使用聲明會忽略(在某種意義上比重載決議更嚴格,部分原因是還沒有參數列表)與class。 void()
和void() &
成員在這個意義上是模棱兩可的,所以bf
只找到B
的f
並且調用是有效的。
在標准的以前(在撰寫本文時,這意味着“已發布”)版本中,這兩個函數都將可用,因為&
區分了它們(在某種意義上更嚴格),這不僅會使調用模棱兩可(如Clang 說)但是完全不正確,因為檢查了基類和派生類函數的重載兼容性,這是它們缺乏的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.