Ale*_*man 8 c++ visual-c++ c++11 visual-studio-2013
请考虑以下代码:
class StringTokenizer
{
private:
char m_delimiter;
std::istringstream m_string;
public:
explicit StringTokenizer(const std::string& str, char delimiter)
: m_string(str)
, m_delimiter(delimiter)
{
}
template <class Container>
operator Container ()
{
Container container;
for (std::string token; std::getline(m_string, token, m_delimiter); )
{
container.insert(container.end(), token);
}
return container;
}
};
Run Code Online (Sandbox Code Playgroud)
这是用法:
vector<string> tmp = StringTokenizer("123 456", ' '); //Please note the implicit conversion
Run Code Online (Sandbox Code Playgroud)
调试时发生以下情况(使用VS2013):
在return转换运算符声明中
container由移动构造的新向量container 被破坏了功能返回后:
tmp 由复制构造函数构造我的问题是为什么不是tmp由移动构造函数构造的?
据我所知,函数返回类型是rvalue,应该移动.
小智 2
VS2013 不会自动生成移动构造函数/赋值。这个问题在以后的版本中得到了解决。
https://msdn.microsoft.com/en-us/library/hh567368.aspx#rvref
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |