我有一个类,其唯一的数据成员是 32 位无符号整数。也就是说,这个类看起来像这样:
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
/* ... some methods ... */
};
但我希望它也能够隐式转换为 32 位无符号整数。所以我添加了一个复制构造函数以及一个强制转换运算符:
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
A(): bits(0) {} // default constructor
A(const unsigned int i): bits(i) {} // convert from unsigned int to A
operator unsigned int() { return bits; } // convert from A to unsigned int
/* ... some methods ... */
};
所以现在例如,我可以做以下事情:
int main () {
// default constructor
A a0 = A();
// convert from unsigned int
A a1 = 1 + 2;
// conversions between the two types:
unsigned int result = (a0 & a1 + 5) / 2;
}
但是我正在努力让它与const
类型一起工作。特别是,以下不起作用:
int main () {
const A a = 5; // works
unsigned int i = a; // compiletime error
}
它说“不存在从 'const A' 到 'unsigned int' 的合适转换函数。”。我将 Visual Studio 2010 与 Microsoft 提供的默认编译器一起使用。
我需要创建什么转换函数才能使其正常工作?