c++ - 我可以将值分配到移动位置吗?
问题描述
我不确定标准对这种情况有何看法。我知道搬出的位置应该能够破坏,但我不知道是否允许我在其中输入新值。
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)));
改为使用该程序会不正确吗?
解决方案
不,程序不会不正确。它会安全且正确地运行,因为std::move
:
除非另有说明,否则所有移出的标准库对象都处于有效但未指定的状态。也就是说,只有没有前置条件的函数,例如赋值运算符,才能在对象被移出后安全地用于对象。
(强调我的)。
这意味着您的buffer
,在被移出后,处于正确但未指定的状态 - 能够分配给其他东西。这种操作在这种情况下被认为是安全的。什么是不安全的,是通过operator []
等等访问它。
推荐阅读
- apache-kafka - 连接器在 KSQLDB 和 Kafka 中如何工作?
- python-3.x - 某些条件下的密码和用户名验证
- zsh - 重置提示后,命令行自动跳转到下一行
- c - C中的标称类型检查
- javascript - 如果javascript中的href为空,如何禁用锚标记
- python - 数据框中条形图形式值的颜色?
- laravel - 在 laravel 门中总是返回 false
- powerbi - PowerBI Premium 连接服务器分析服务
- erlang - 函数列表中的异常错误:foldl/3(lists.erl,第 1263 行)
- javascript - 如何从 Rust 函数获取字节到 JavaScript?