questions regarding the design of std::initializer
I have some questions regarding the design of std::initializer_list
. I didn't find answers in [support.initlist] .
Why does it have an explicitly defined default constructor?
Why this constructor is not constexpr
?
Why the method size()
is not constexpr
?
Why there's no traits giving the size of initializer_list
(like specializing std::tuple_size
)?
Why it's not possible to statically access its elements (like specializing std::get
)?
What happens when sizeof
is applied to initializer_list
?
From section 18.9 of the C++ Standard:
An object of type initializer_list provides access to an array of objects of type const E. [ Note: A pair of pointers or a pointer plus a length would be obvious representations for initializer_list. initializer_list is used to implement initializer lists as specified in 8.5.4. Copying an initializer list does not copy the underlying elements. — end note ]
I think the reason for most of these things is that std::initializer_list isn't actually a container. It doesn't have value semantics, it has pointer semantics. Which is made obvious by the last portion of the quote: Copying an initializer list does not copy the underlying elements. Seeing as they were intended solely for the purpose of initializing things, I don't think it's that surprising that you don't get all the niceties of more robust containers such as tuples.
链接地址: http://www.djcxy.com/p/14650.html