c++ - 初始化为同一个变量

标签 c++

我只是在我的单元测试代码中发现这是一个错误输入:

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;
}

Compiled with gcc 4.8

最佳答案

它是有效的 *(取决于 Binding 的定义),因为声明的名称从声明的时候就立即知道了。

例如

struct Node { Node* next; int value; };

是同一一般原则的一个例子,而

Node head = {&head, 0};

是使用(或滥用)该想法的变量声明的更直接示例。


*如果代码调用一个普通的移动构造函数试图从一个未初始化的对象移动,那么这是未定义的行为,并且在这个意义上是无效的。

关于c++ - 初始化为同一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296543/

相关文章:

c++ - 在 C++ 中使用命令行参数的 cgi 脚本

C++11 自动和 decltype

c++ - 在类中创建类的实例 (C++)

c++ - 将 C++ std::enable_if 与普通函数一起使用?

c++ - 如何提高 Visual C++ 编译时间?

c++ - 指向成员函数的指针的语法错误

c++ - 标准 vector 之上的 C++11 包装器类

c++ - 当我没有调用两次时,输出如何显示两次?

c++ - 对于 C++ 中的次要或相等条件

c++ - 使用私有(private)成员函数调用 Win32 QueueUserWorkItem()