我只是在我的单元测试代码中发现这是一个错误输入:
Binding binding(x, y, z);
Binding moved(std::move(moved)); // Should be `std::move(binding)`
为什么这个代码有效?这里发生了什么?这不应该是一个错误吗?
#include <string>
#include <iostream>
int main() {
std::string x(std::move(x));
std::cout << '"' << x << '"' << std::endl;
}
最佳答案
它是有效的 *(取决于 Binding
的定义),因为声明的名称从声明的时候就立即知道了。
例如
struct Node { Node* next; int value; };
是同一一般原则的一个例子,而
Node head = {&head, 0};
是使用(或滥用)该想法的变量声明的更直接示例。
*如果代码调用一个普通的移动构造函数试图从一个未初始化的对象移动,那么这是未定义的行为,并且在这个意义上是无效的。
关于c++ - 初始化为同一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296543/