所以我有這樣的代碼:爲什麼有一個複製構造函數會導致此代碼中斷?
template<class T>
struct IntegerType
{
T value;
//Next line causes errors
//constexpr IntegerType(IntegerType& value) : value(value.value) { }
constexpr IntegerType(T value) : value(value) { }
};
template<class int_t>
class FullMult{
int_t value;
int_t carry;
public:
constexpr FullMult() : value(0), carry(0) { }
constexpr FullMult(const int_t& value, const int_t& carry) : value(value), carry(carry) { }
};
int main()
{
FullMult<IntegerType<unsigned int> > thing
= FullMult<IntegerType<unsigned int> >(
IntegerType<unsigned int>(12),IntegerType<unsigned int>(12));
}
但是當我嘗試通過取消註釋行constexpr IntegerType(IntegerType& value) : value(value.value) { }
代碼休息,以一個拷貝構造函數添加到類型IntegerType
並告訴我,我想使用的拷貝構造FullMult
類型:
use of deleted function 'FullMult<IntegerType<unsigned int> >::FullMult(FullMult<IntegerType<unsigned int> >&&)'
這是給我的錯誤代碼:
template<class T>
struct IntegerType
{
T value;
//Next line causes errors
constexpr IntegerType(IntegerType& value) : value(value.value) { }
constexpr IntegerType(T value) : value(value) { }
};
template<class int_t>
class FullMult{
int_t value;
int_t carry;
public:
constexpr FullMult() : value(0), carry(0) { }
constexpr FullMult(const int_t& value, const int_t& carry) : value(value), carry(carry) { }
};
int main()
{
FullMult<IntegerType<unsigned int> > thing
= FullMult<IntegerType<unsigned int> >(
IntegerType<unsigned int>(12),IntegerType<unsigned int>(12));
}
這裏發生了什麼事?
您是否使用一個類作爲另一個類的模板參數? – Kupto
問題中的代碼應該是破碎的代碼,而不是工作代碼。請清楚明確地發佈一個顯示問題的MCVE –
@Kupto是..... – DarthRubik