std::thread对象可以引用吗?

C++多线程中,明确说明std::thread对象可以移动不能拷贝,
但是有的地方有这样写道:

class X{
    std::thread &t;
public:
    explicit X(std::thread& t_) : t(t_) {}
        ...
}

std::thread t(...);
X g(t);

那么在创建g对象时不是就对t进行引用了吗?是可以这样吗?

都在答非所问,题主你的疑虑是既然thread只能移动不能拷贝,为什么库里面有些类的构造函数参数用了thread的引用。
首先你要知道引用不是拷贝,引用&表示用一个新的引用变量指向这个对象,对象本身没有做任何拷贝动作,只是多了一个东西指向他,那么其实你的疑虑根本是不矛盾的,thread不支持拷贝并不代表不能引用。
其次,为什么要用引用不用移动,移动意味着提供一种能力可以将原来的对象内容转移到新的对象里,原来的对象内容就空了(通常移动构造函数这么写),显然,如果原来的对象是个左值(如你提供的例子,t是个左值),移动是不合理的,否则移动后这个对象t被其他代码用怎么办? 其实你可以用std::move显式地让class X接受t并调用其移动构造函数,但是这个操作不合理。那么你的问题其实很简单,库函数如果不提供引用的支持,意味着它只接受右值,这对于这个库来说适用性太低了,所以非特殊情况根本不可能,提供引用是普适做法,在此基础上提供移动语义是锦上添花,对于右值来说能提高效率

这个问题问得有点莫名其妙,不知道怎么回答。

我观察很多问题都存在这样的问题,可能有大量的初学者来问答上问一些最基础的问题,但是问题描述的不清楚,或者自己的想法思路错了,让
别人很难理解。

我觉得出现这个问题的原因是,初学者学习方法错了。

要明白学习的重点是什么,不要在某些不重要的内容上较真。

有些初学者提得问题让人很诧异,让别人无法回答。

可以的
标准库源代码中很多函数都是thread的引用

 inline void swap(thread& _Left, thread& _Right) _NOEXCEPT
    {   // swap _Left with _Right
    _Left.swap(_Right);
    }

概念有点混淆
1.这个构造函数只是引用的操作,汇编之后实际上就是指针复制 ,std::thread &t的声明相当于std::thread * t,不关乎对象的拷贝和移动
2.对象的拷贝和移动指的是拷贝构造函数和移动构造函数,牵扯到的是左值引用和右值引用。具体的概念可以百度,一言两语说不明白
3

推荐本书吧《深度探索c++对象模型》

关于对象的移动和拷贝,可以去知乎上看看,上面的回答还比较有深度

哎哎 还是我来回答你吧,看来你是根本没搞清楚移动是怎么回事,移动和拷贝指的是移动构造函数和拷贝构造函数,针对这句话”C++多线程中,明确说明std::thread对象可以移动不能拷贝“,说的更详细点就是 thread类只有移动构造函数,没有拷贝构造函数。 具体到你到例子:
class X{
std::thread &t;
public:
X(X& x1) ;//拷贝构造函数
X(X&& x2) ;//移动构造函数

}
移动构造函数和拷贝构造函数的参数类型都是X