在对象上调用std::move后,如果之后使用该对象,为什么语言不引起编译错误?

是否因为编译器无法检测到这种情况?

最佳答案

C++语言设计的一般原则是“信任程序员”。在成为std::move的参数之后,拒绝使用该对象时,我会想到一些问题。

  • 通常情况下,确定给定的使用是否在调用std::move之后,将等同于解决暂停问题。 (换句话说,这无法完成。)您将不得不提出一些规则,这些规则以可以静态确定的方式描述“之后”的含义。
  • 通常,将对象分配给std::move作为参数是完全安全的。 (一个特定的类可能会引起一个断言,但这将是一个非常奇怪的设计。)
  • 对于编译器来说,很难判断给定的函数是否仅要给类的元素分配新值。
  • 关于c++ - 在std::move之后使用对象不会导致编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42795683/

    10-10 14:04
    查看更多