#include <iostream> #include <type_traits> #include <string>/* template< std::size_t Len, std::size_t Align = default-alignment >struct::type aligned_storage; 相当于一个内建的POD类型他的大小是Size他的对齐方式是Align */ template<class T, std::size_t N> class static_vector {typename std::aligned_storage<sizeof(T), __alignof(T)>::type data[N];std::size_t m_size = 0; public://类似于vector的push_back,使用了变长模板参数//和placement newtemplate<typename ...Args>void emplace_back(Args&&... args){if (m_size >= N)throw std::bad_alloc{};new(data + m_size) T(std::forward<Args>(args)...);++m_size;}const T & operator[](std::size_t pos) const{const T * ret = reinterpret_cast<const T*>(data + pos);return *ret;}~static_vector(){for (std::size_t pos = 0; pos < m_size; ++pos)reinterpret_cast<T*>(data + pos)->~T();} };int _tmain(int argc, _TCHAR* argv[]) {std::cout << __alignof(std::string) << std::endl;static_vector<std::string, 10> v1;v1.emplace_back(5, '*');v1.emplace_back(10, '*');std::cout << v1[0] << '\n' << v1[1] << '\n';return 0; }