移动const对象是否有用?

vso*_*tco 7 c++ move-semantics c++11

我意识到"你不能移动const对象"的常识并不完全正确.如果你宣布移动ctor为,你可以

X(const X&&);
Run Code Online (Sandbox Code Playgroud)

完整示例如下:

#include <iostream>

struct X
{
    X() = default;
    X(const X&&) {std::cout << "const move\n";}
};

int main()
{
    const X x{};
    X y{std::move(x)};
}
Run Code Online (Sandbox Code Playgroud)

Live on Coliru

问:有什么理由让人想要这样的事吗?任何有用/实用的场景?

Lig*_*ica 2

你的例子并不能改变任何事情。是的,您编写了std::move一个右值并调用了一个移动构造函数,但实际上最终没有任何内容被移动。但它不能,因为该对象是const.

除非您感兴趣的成员被标记mutable,否则您将无法进行任何“移动”。因此,不存在有用的甚至可能的场景。