c++ - C++:用整数移动语义
问题描述
int c = 2;
int d = std::move(c);
std::cout << "c is: " << c << std::endl;
std::cout << "d is: " << d << std::endl;
此代码输出:
c是:2
d 是:2
我认为在 move(c) 到 d 之后,c 将是空的,为什么它的值仍然是 2?有人可以帮我解释一下吗?谢谢你。
解决方案
我以为 move(c) 到 d 之后,c 会是空的,
你的期望被误传了。
为什么它的值仍然是 2 ?
基本类型没有移动构造函数。你只是做了一个副本。复制不会修改源对象。
对于类类型,假设移动构造函数的确切作用是不安全的,特别是源对象处于什么状态。不一定保证为“空”。请参阅该类的文档以了解它的作用。如果没有文档,或者文档没有提供任何保证,那么您就不能对源对象的状态做出任何假设。
推荐阅读
- powershell - 如何使用 PowerShell 显示 Unicode 字符名称及其十六进制代码?
- jsp - 我收到此错误:java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'employee.PRIMARY'
- arrays - 如何从char数组中提取数字并将它们相加
- python-3.x - 使用 Python RDFLib 解释 .ttl 文件中的链接数据的工作流程
- python - Python海龟赛重启功能
- docker - 带有 consul 和 docker swarm EE 的服务网格
- ejabberd - Ejabberd STUN 问题:未知模块 mod_stun_disco 无法启动
- bash - 使用一行 shell 命令编辑 dhcpd.conf 文件
- java - 将通配符传递给进程构建器
- firebase-realtime-database - 如何克服 Firebase 实时数据库规则中的级联?