簡體   English   中英

默認構造函數和默認參數構造函數如何導致 cpp 中的歧義?

[英]How can a default constructor and a default argument constructor cause ambiguity in cpp?

默認構造函數和默認參數構造函數之間有什么區別? 一個例子會有所幫助

我想你的意思是這樣的:

struct foo {
    foo(int x = 1) {}
    foo() {}
};

默認構造函數是可以不帶參數調用的 構造函數(我想這就是您誤解的地方)。 上面的兩個構造函數都是默認構造函數。 它們都可以在沒有參數的情況下調用,當您通過調用構造函數時

foo f;

兩者都是可行的,編譯器無法解決歧義。

構造函數,所有的參數都默認也是該類的默認構造函數。

struct Foo
{
    Foo() = default;
    Foo(int = 0){};
};

int main() {
    Foo f;
}

不會編譯,因為有兩個候選默認構造函數,因此重載解析將失敗。 (請注意, Foo f(1);將編譯為重載決議不再模棱兩可。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM