这是我试图了解类初始化如何工作的尝试。我不确定一切,这就是我问这个问题的原因。这就是我认为当我们执行以下操作时会发生的情况:
T t = u;
从构造一个类型的
T
对象u
。然后变成:T t = T(u);
调用复制构造函数:
T t( T(u) );
好的,第二个是我不理解的部分。我在某个地方读到T t = u
了T t(T(u))
. 但如果这是真的,为什么不打印“复制构造函数”:
struct T
{
template <class U>
T(U) {
std::cout << "constructs an object of type T...\n";
}
T(T const &)
{
std::cout << "copy-constructor";
}
T& operator=(T const &)
{
std::cout << "assignment operator"; return *this;
}
T() = default;
};
int main()
{
T t(T(5));
}
实际上,这一切都是打印“构造一个 T 类型的对象”。为什么这里不调用复制构造函数?T(5)
可以制成一个类型的对象,该对象T const &
被传递给构造函数,T
因此不应该调用适当的构造函数。
我真的很想对此有所了解。我一直试图理解这一点。