首页 > 解决方案 > 我可以将值分配到移动位置吗?

问题描述

我不确定标准对这种情况有何看法。我知道搬出的位置应该能够破坏,但我不知道是否允许我在其中输入新值。

std::vector<int> get_user_input(const std::string& prompt) {
  std::vector<int> numbers;
  std::string buffer;

  do {
    std::cout << prompt;
    std::getline(std::cin, buffer);
  } while (buffer == "");

  std::stringstream stream (buffer);

  while (std::getline(stream, buffer, ' ')) {
    numbers.push_back(std::atoi(buffer.c_str()));
  }

  return numbers;
}

如果std::stringstream stream(std::move(buffer)));改为使用该程序会不正确吗?

标签: c++move-semantics

解决方案


不,程序不会不正确。它会安全且正确地运行,因为std::move

除非另有说明,否则所有移出的标准库对象都处于有效但未指定的状态。也就是说,只有没有前置条件的函数,例如赋值运算符,才能在对象被移出后安全地用于对象。

(强调我的)

这意味着您的buffer,在被移出后,处于正确但未指定的状态 - 能够分配给其他东西。这种操作在这种情况下被认为是安全的。什么是不安全的,是通过operator []等等访问它。


推荐阅读