【发布时间】:2011-09-18 01:55:26
【问题描述】:
我有这些代码:
class Type2 {
public:
Type2(const Type1 & type);
Type2(int);
const Type2 & operator=(const Type2 & type2);
//....
};
...
Type1 t1(13);
Type2 t2(4);
t2=t1;
据我了解,Type2 的 1 参数构造函数每个都没有 explicit 关键字应该意味着任何 Type1 对象或 int 值都可以隐式转换为 Type2 对象。
但是在最后一行 t2=t1;,MS Visual Studio 给了我这个编译错误:
....错误 C2679:二进制“=”:无运算符 发现它需要一个右手操作数 'Type1' 类型(或没有 可接受的转换)....
似乎 MS Visual Studio 坚持 t2=t1; 必须匹配具有 lhs=Type2 和 rhs=Type1 的赋值运算符。为什么不能将 rhs 隐式转换为 t2 然后使用 Type2=Type2 运算符进行复制?
【问题讨论】:
-
这段代码在 VS2010 中编译得很好。
-
我知道为什么。因为我的Type1有一个转换运算符:class Type1 { operator Type2() };
-
我可以关闭我自己找到答案的问题吗?
-
@JavaMan:你可以(也应该)回答你自己的问题。
-
@JavaMan:甚至可以将您自己的答案标记为已接受的答案,让社区知道此问题现已解决。
标签: c++ visual-studio type-conversion explicit-constructor