2012-06-06 30 views

回答

1

您可能知道,非POD类型的移动是技术上未定义的行为。除此之外,变体不包含任何如果移除会造成问题的东西。既然你提到QList和QString是可变的,并且我很难相信它们是POD(尽管我没有看到它们),但boost :: variant并没有变得更糟。

2

A boost::variant只包含一个积分索引和一个aligned_storage,它由标准保证是一个POD。它没有虚拟成员,但具有用户定义的构造函数和析构函数。因此,boost::variant不是一个POD,并试图把它看作UB(好吧,我认为它是UB,我没有在标准中找到明确的参考)。

然而,同样可以针对QListQStringApparently,Qt的假定一些非POD类型可以安全地memmoved,并使POD之间的区别(所谓的“原始类型”)和所述“活动类型“。因此,如果您认为可以安全地移除QList,那么您可以考虑安全地移除含有可移动类型的boost::variant

+0

+1为链接到容器内部! – leemes

相关问题