我在 SO 上看到了其他关于此的问题,但没有一个可以完整地解释它。编译器处理以下两种情况的正确方法是什么?我已经使用 gcc 4.7.1(使用 -std=c++0x)、VS2010 和 VS2012 进行了尝试,得到了不同的结果:
示例 1:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = b;
}
输出:
- gcc 4.7.1:好的
- VS2010:好的
- VS2012:失败:“无法从 BB 转换为字符串”
示例 2:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = (string)b;
输出:
- gcc 4.7.1:失败:重载字符串(BB&)的调用不明确
- VS2010:好的
- VS2012:失败:“无法从 BB 转换为字符串”