c++11 - c++标准有关于处在moved状态的容器的说明吗?

查看:121
本文介绍了c++11 - c++标准有关于处在moved状态的容器的说明吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

std::string a = "xxx";
std::string b = std::move(a);
//这时候的a,处于什么状态呢
a = "bbbbb";//合法吗?

因为我实际用下来好像有点问题。所以我就想知道,在标准中,是怎么描述这个问题的。

解决方案

C++11 21.4.3.17:
basic_string(basic_string&& str, const Allocator& alloc);
str is left in a valid state with an unspecified value.
因为a其实是左值,被转化为右值了,所以b会指向a的data()缓冲区。这个时候a就处于未定义状态,再访问a的值就不安全了。
不过a = "bbbbb"是合法的。
因为这个a重载了赋值运算符。
basic_string<charT,traits,Allocator>& operator=(const charT* s);
会返回一个
*this = basic_string<charT,traits,Allocator>(s)
相当于又构造了一个新的临时对象basic_string右值。它会拷贝"bbbbb"的值,这是a就指向新分配的缓冲区了,理应是没问题的。

这篇关于c++11 - c++标准有关于处在moved状态的容器的说明吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆