我正在编写一些函数来操作矢量数据。
我定义了不可复制的对象(私有复制构造函数和赋值运算符)。
然后我定义了模板化运算符 =
template <typename G>
inline const TMatrix &operator=(const G &gen) {
ir_mat::Copy<G, Dimension>::start(m_data, gen);
return *this;
}
以及一些额外的运算符,如 '+'、'*',如本文所述。
现在我可以将表达式的结果分配给一个对象:
Vector3f v1, v2, v3;
v1 = v2 + v3;
为什么我不能声明一个变量并在单个语句中分配它?
Vector3f v1, v2;
Vector3f v3 = v1 + v2;
是不是因为这个赋值试图在实例化变量之前创建一个临时对象,然后将它复制到新对象中?我可以使用我的运算符“=”来实例化新对象,而无需临时存储吗?我必须为此定义一个特殊的构造函数吗?
更新
我还定义了一个模板化的复制构造函数(可能是最简单的形式):
template <typename G>
TMatrix(const G &data) {
operator=(data);
}
现在我也可以将 v3 实例化为:
Vector3f v3(v1 + v2);
但是其他任务仍然没有运气:
Vector3f v3 = v1 + v2;