这段代码可以编译,但我认为它没有达到我的预期,也就是说,将堆栈中创建的boost::any对象移动,不复制到std::vector<boost::any>

boost::any var;
var = std::string("StackOverflow");

std::vector<boost::any> vm;
vm.push_back(std::move(var));

for (auto& i : vm)
{
  std::cout << boost::any_cast<std::string>(i) << std::endl; // yes a copy exists
}
std::cout << boost::any_cast<std::string>(var) << std::endl; // but this copy still exists too. was it not moved??

最佳答案

如果您研究boost/any.hpp并观察其源代码(至少找到用于移动的单词),您会发现它完全是C++ 11意识不到的(不幸的是)!
因此您最好使用boost::any::swap模拟移动分配(如果您仍然想使用boost::any)

关于c++ - boost::任何可动的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18165692/

10-11 22:46
查看更多