第一个问题的答复:T是用户自定义的类型,因为是直接返回的值,而不是引用,所以编译器需要复制一份给调用的地方使用,因此就需要调用T的拷贝构造函数,就是你说的复制构造函数。如果类中没有显示定义,那么编译器会使用其默认生产的拷贝构造函数,这个时候可能存在未定义行为,主要视T的内部成员来定,如果有其他自定义类型,很可能默认的拷贝构造是不完整的。
第二个问题的答复:a=b,a就是左值,b就是右值。1=100,1是一个具体的数字,不能作为左值。同样T是一个具体的变量,因此不能作为左值。而T的引用,即T&,可以更改其引用的对象,比如可以代表A,同样可以代表B,因此是可以作为左值的。
其实一个是返回值,一个是返回引用。和函数的传递值和传递引用的概念是一样的。
不知道是否说清楚了,希望对你有帮助