[英]=default ignores access specifier?
我發現很奇怪,盡管默認構造函數是private
(4.8.1 g ++),但下面的程序仍然編譯得很好:
class A{
private:
A() = default;
A(const A&) = default;
};
int main(){
A a;
}
實際上從標准的8.4.2 [2](N3242)
顯式默認函數只有在被隱式聲明為constexpr時才可以聲明為constexpr。 如果在第一次聲明中明確違約,
- 它應該是公開的,
..........
默認說明符忽略訪問規范的目的究竟是什么? 我覺得這可能會導致類設計者不希望用戶創建默認值但需要實現中的默認構造函數的接口問題。 我想也許是因為默認構造函數通常是public
,因此default
目標是復制它 - 但這並不能解釋為什么復制構造函數的=default
不會忽略private
規范。
class A{
private:
A() = default;
A(const A&) = default;
};
int main(){
A a;
A b(a); //error: constexpr A::A(const A&) is private
}
實際上我從標准中看不出它明確默認的copy/move
構造函數/賦值是不public
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.