相关疑难解决方法(0)

使用std :: move的未定义行为

从cppreference 的移动页面

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

因此,从同一页面上的示例,下面的代码被视为未定义的行为

vector<string> v_string;
string example = "example";
v_string.push_back(move(example));
cout << example << endl;
Run Code Online (Sandbox Code Playgroud)

MSVC将不会在控制台上输出任何内容,但是如果我这样做的话

vector<int> v_int;
int number = 10;
v_int.push_back(move(number));
cout << number << endl;
Run Code Online (Sandbox Code Playgroud)

将输出10.这是否有理由发生?或者它总是未定义的行为?

c++ c++11

6
推荐指数
1
解决办法
949
查看次数

标签 统计

c++ ×1

c++11 ×1