C++ 1y中是否需要公共的,类内的typedef?

PSk*_*cik 9 c++ c++11 c++14

我注意到std::容器往往有public类内类型别名(typedef/ using).例如,请参阅http://en.cppreference.com/w/cpp/container/vector上的"成员类型" .

它们有用吗?他们不是只是一个时代的遗物时,C++没有之类的东西autodecltype

实现自定义容器时,是否应该有这样typedef的?如果我没有提供,我会失去什么?

n. *_* m. 7

如果需要与标准库兼容的容器,则必须提供typedef.

如果你查看文档,例如在cppreference,你会看到这样的段落:

std :: vector满足Container,AllocatorAwareContainer,SequenceContainer,ContiguousContainer(除了bool之外的T)(自C++ 17)和ReversibleContainer的要求.

如果你看到了集装箱或SequenceContainer或上市还有其他的事情,你会发现需求列表,和类型定义(或者更确切地说类型,它们不具备成为类型定义,但他们往往是)也在其中.

因此,如果您在标准意义上构建容器,则需要提供typedef(当然也满足所有其他要求).

从理论上讲,C++ 11可以放宽要求,但事实并非如此.也许是因为

std::vector<int>::iterator
Run Code Online (Sandbox Code Playgroud)

比...更具可读性

decltype(std::declval<std::vector<int>>().begin())
Run Code Online (Sandbox Code Playgroud)

或者也许出于其他原因.