簡體   English   中英

由用戶定義的構造函數初始化

[英]Initialization by user-defined constructor

考慮以下程序:

#include <iostream>

struct A
{
    A(int, int){ std::cout << "A(int, int)" << std::endl; }
};

A a(4,4);
A b{4,4};
A c({4,4});

int main(){ }

輸出:

A(int, int)
A(int, int)
A(int, int)

演示

我對abc初始化之間有區別嗎? 任何主題都直接初始化。

A a(4,4);

沼澤標准直接初始化

A b{4,4};

沼澤標准直接列表初始化 由於A沒有initializer_list構造函數,因此最終完成與上述相同的操作。 絕不會構造或銷毀std::initializer_list對象。

A c({4,4});

這從A臨時對象直接初始化 c ,而該臨時對象又從braced-init-list {4, 4} 復制列表初始化 請注意,如果A::A(int, int)explicit ,則此方法將不起作用,因為在這種情況下,復制列表初始化將格式錯誤,並且您將無法調用任何可行的構造函數。 臨時結構的建造和破壞通常可以避免。

暫無
暫無

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

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