簡體   English   中英

std::initializer_list 如何工作?

[英]How std::initializer_list Works?

我目前正在研究 c++11 我不明白 std::initializer_list 的構造函數它看起來像這樣

constexpr initializer_list() noexcept : _First(nullptr), _Last(nullptr) {}

constexpr initializer_list(const _Elem* _First_arg, const _Elem* _Last_arg) noexcept
    : _First(_First_arg), _Last(_Last_arg) {}

但它是如何工作的

std::initializer_list<int> v{1,2,3,4,5,6,7,8,9,0};

我試過這個

constexpr init(const _Elem* _First_arg, const _Elem* _Last_arg) noexcept
    : _First(_First_arg), _Last(_Last_arg) {}

但這顯示錯誤

init<int> ob{1,2,3,4,5,6,7,8,9,0}; //this shows error

 note: candidate: 'constexpr init<_Elem>::init(const _Elem*, const _Elem*) [with _Elem = int]'
 constexpr init(const _Elem* _First_arg, const _Elem* _Last_arg) noexcept
           ^~~~
 note:   candidate expects 2 arguments, 10 provided

我將 {} 更改為 () 喜歡

std::initializer_list<int> v(1,2,3,4,5,6,7,8,9,0);

這顯示錯誤。

1)std::initializer_list 是如何工作的?

2) {} 后面是什么?

謝謝。

std::initializer_list是特殊的。 不可能以相同的方式編寫可以用作構造函數參數的 class。 語言規則指定std::initializer_list如何工作 - 或者更確切地說,接受std::initializer_list的構造函數,即初始化列表構造函數如何工作。 語言實現使其按規定工作。

PS 標識符(例如_Elem )保留給語言實現。 由於您的 class init不是語言實現的一部分,因此使用保留標識符會導致未定義的行為。 不要使用保留的標識符。

暫無
暫無

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

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