在尝试使用创建重载的类型转换运算符时,我遇到了一个最奇怪的问题 作为测试,我将以下运算符添加到我的Vector2数学类中:
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类是模板化的。
答案 0 :(得分:1)
当您尝试转换的对象与结果具有相同的类型时,将执行copy initialization。这最终会调用适当的构造函数。如果Vector2
有一个移动构造函数,那么将调用它来执行static_cast
。如果没有,将调用复制构造函数。