Identifier<const std::wstring&, int64_t> item_ref = item;
ITEM_REF具有正确的值。
当我将物品放入向量时。
std::vector< Identifier< const std::wstring&, int64_t > > collection;
collection.emplace_back( item );
i在element in element in vector中的字符串引用中有无效的值,而在item_ref中的字符串参考中的无效值。
为什么它发生以及如何适合呢?
您首先使用
Identifier(Args...)
构造函数,然后使用另一个构造函数。
template< typename ... T >
requires std::convertible_to< std::tuple< Args... >, std::tuple< T... > >
Identifier( const Identifier< T... >& identifier ): std::tuple< Args... >(static_cast< std::tuple< T... > >(identifier))
{}
当传递给它时,首先将其作为参数创建给构造函数。然后,此参考为a
item
。
注意static_cast
,因为这是模板类型。这意味着您将参考文献抛弃,从而导致原始
std::tuple<T...>
的临时副本。然后,您将该副本的
T...
成员分配给A
std::wstring, int64_t
通过基础的构造。施工后,临时性被摧毁,留下引用已删除的物体。