我需要声明大量的简单 POD 结构,它们的行为相同,但实际上是不同的类型,即不是 typedef。
无论如何,我只是想让它们尽可能简单。但是在测试时我看到编译器执行了一些隐式转换,我想避免这种情况。
鉴于此代码:
template<typename T>
struct Struct {
T data;
operator T() const { return data; }
};
void fun(Struct<float> value)
{
cout << "Call with Struct :: " << value << endl;
}
void fun(int value)
{
cout << "Call with INT :: " << value << endl;
}
int main(int, char**)
{
fun(3);
fun(4.1f);
fun(Struct<float>{5.2});
fun(Struct<double>{6.3});
return 0;
}
用 GCC 编译。
执行给了我:
Call with INT :: 3 // Ok
Call with INT :: 4 // [1]
Call with Struct :: 5.2 // Ok
Call with INT :: 6 // [2]
如何避免隐式转换 [1] 和 [2] ?
谢谢