忽略 C++ 重载类型转换运算符

C++ overloaded typecast operator ignored

我在尝试使用创建重载类型转换运算符时遇到了最奇怪的问题。
作为测试,我将以下运算符添加到我的 Vector2 数学 class:

operator Vector2 <T> () const {return (Vector2 <T> (100, 100));};

我正在使用以下代码来测试运算符:

Vector2 <float> vec01 (1, 1);
Vector2 <float> vec02 (static_cast <Vector2 <float>> (vec01));

std::cout << vec02 << '\n';

首先,代码将 vec01 设置为值 (1, 1),效果很好。

接下来,我将创建另一个向量,并在其构造函数中进行静态转换(这又应调用类型转换重载)。

但是,当我打印出 vec2 的值时,它打印的是值 (1, 1),而不是重载中指定的值。

单步执行代码后,我确认它实际上从未被调用。

有谁知道为什么?过去几个小时我一直在寻找解决方案,但没有成功。
如果有帮助,我正在使用 Visual Studio 2013 Ultimate。

编辑: 我还应该注意到 Vector2 class 是模板化的。

当您尝试转换的对象与结果具有相同类型时,执行copy initialization。这最终会调用适当的构造函数。如果 Vector2 有一个移动构造函数,它将被调用以执行 static_cast。如果没有,将调用复制构造函数。