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

时间:2015-01-10 07:46:40

标签: c++ c++11 casting

在尝试使用创建重载的类型转换运算符时,我遇到了一个最奇怪的问题 作为测试,我将以下运算符添加到我的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类是模板化的。

1 个答案:

答案 0 :(得分:1)

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